用于低延迟网页游戏的HTTP或Websocket

HTTP or Websocket for a low-latency web game?

本文关键字:HTTP Websocket 游戏 延迟 网页 用于      更新时间:2023-09-26

我是web开发新手,我只是想知道一些性能比较。

我正在网络上创建一个俄罗斯方块战斗游戏。大多数游戏逻辑都是在服务器中,它是用c++构建的。对于客户端,我打算使用cocos2d-js,基本上就是javascript。

玩家的行为会影响对手。首先,用户的输入需要正确地到达服务器,服务器将输入应用于逻辑,并将新的游戏状态发送回客户端。客户端只需要在屏幕上表示精灵。

我最初的计划是用TCP套接字实现它,因为它可能需要低延迟。然而,我刚刚意识到我们在网络上不使用TCP套接字。

在这种应用程序中使用HTTP连接是否可行?我应该试试web socket吗?优点和缺点是什么?

你当然可以使用HTTP,但对于实时通信,最好的选择是使用websockets。

原始套接字(即TCP套接字)不是W3C标准的一部分。尽管一些浏览器已经实现了它们,但我还是建议避免使用它们,除非你不关心将应用程序锁定在特定的浏览器中。

一般来说,使用Websockets将是你最好的选择,它们提供与原始socket相同的性能,并且更容易在JS中使用。不幸的是,使用c++服务器可能会更复杂,因为您的服务器必须实现该协议,您可以在互联网上找到一些实现,例如:

或者,如果你想与客户端/服务器有一个更简单的集成,你可以尝试Node.js来实现你的服务器逻辑,并使用Socket。IO库来处理通信,它也可以优雅地处理不兼容的浏览器。请注意,Socket。io 使用一个不同的协议,所以如果你想避免做很多额外的工作,我不建议你在你当前的c++服务器上使用它。

总结一下

原始(TCP)套接字

  • 优点:更容易与您当前的c++服务器集成
  • 缺点:浏览器支持不保证,不是(web)标准,将需要更多的同步,通信等工作

Websockets

  • 优点:性能与TCP套接字相当,更容易实现客户端
  • 缺点:你可能需要在你的服务器实现上做更多的工作

我个人的建议是尽可能避免TCP套接字,并坚持使用标准。

编辑:显然,TCP套接字可能最终成为W3C标准,api仍然是草案(并且是最近的一个),所以我仍然建议不要使用它们(最新的Chrome有一个实验性实现)。

我认为@Sosdoc给出了正确的答案。我唯一想补充的是,像SignalR这样的库可以帮助你实现websockets。您可能想要查看github上的c++ signalr-qt项目:https://github.com/p3root/signalr-qt