低延迟网络游戏,使用HTTP还是Websocket?

4
我是一个新手开发者,想了解一些性能比较。我正在Web上构建一个俄罗斯方块对战游戏。大部分的游戏逻辑都在服务器中实现,该服务器是用C++构建的。对于客户端,我计划使用cocos2d-js,它基本上是JavaScript。
玩家的行为会影响对手。首先,需要将用户的输入正确地发送到服务器,服务器应用输入到逻辑中,并将新的游戏状态发送回客户端。客户端只需要在屏幕上表示精灵。
我的原始计划是使用TCP套接字进行实现,因为可能需要低延迟。然而,我刚刚意识到我们在Web上不使用TCP套接字。
对于这种应用程序,使用HTTP连接是否可行?我应该尝试WebSocket吗?有什么优缺点?
2个回答

5
你当然可以使用HTTP,但对于实时通信,最好的选择是使用WebSockets。
原始套接字(即TCP套接字)不属于W3C标准。尽管一些浏览器已经实现了它们,但我建议避免使用它们,除非您不介意将应用程序锁定在特定的浏览器上。
总的来说,使用WebSockets将是您的最佳选择,它们提供与原始套接字相同的性能,并且更容易从JS中使用。不幸的是,使用C++服务器可能会更加复杂,因为您的服务器必须实现协议,您可以在互联网上找到一些实现,比如这个
或者,如果您想要与客户端/服务器进行更简单的集成,可以尝试使用Node.js实现您的服务器逻辑,并使用 Socket.io库处理通信,这也将优雅地处理不兼容的浏览器。请注意,Socket.io使用不同的协议,因此如果您想避免做大量额外的工作,我不建议尝试将其与当前的C ++服务器一起使用。
总之
原始(TCP)套接字
利:
易于与您当前的C ++服务器集成
缺点:
浏览器支持不能保证,不是(Web)标准,需要更多的工作来进行同步、通信等。
WebSocket
利:
与TCP套接字性能相当,更易于实现客户端
缺点:
您可能需要在服务器实现上做更多的工作。
我的个人建议是尽可能避免使用TCP套接字并坚持使用标准。 编辑: 显然,TCP套接字可能最终成为W3C标准,API仍然是一份草案(而且是最近的一份),因此我仍建议不要使用它们(最新版Chrome有一个实验性的实现)。

使用原始的TCP sockets仍然需要建立一个帧机制,这基本上就是WebSocket协议的作用。 - vtortola

0

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


SignalR是一个polyfill,它有许多可扩展性问题,在其关于“扩展”的文档中有详细解释。我会使用原始的WebSockets。 - vtortola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接