用于低延迟网页游戏的HTTP或Websocket
HTTP or Websocket for a low-latency web game?
我是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
- Meteor如何接收HTTP请求
- chrome在WebSocket握手期间获取新错误
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- 在我的情况下,如何进行http请求
- //而不是在src=“”上使用http://"属性
- 我无法使用angularJs($http)访问服务器
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 如何将PHP get查询转换为Meteor's HTTP.get()
- 角度异步http自动完成
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 角度http服务器页面刷新404s
- http.listen()在运行时接受终端命令
- IIS动态HTTP响应标头
- 具有http服务器、websocket和express的体系结构
- Node.js http代理删除websocket请求
- websocket可以使用http模块,但不能使用express(node.js)
- 是否有将 WebSocket 请求转换为服务器上的 HTTP 请求的标准
- 谁正在发送http websocket升级请求
- 为什么websocket连接创建不通过http
- 用于低延迟网页游戏的HTTP或Websocket