Websockets和长轮询在回合制游戏服务器中的区别

120

我正在为iOS游戏编写服务器。游戏是回合制的,服务器只需要在对手移动时向客户端推送信息。

我想知道使用WebSockets和长轮询之间在性能和实现难度方面有何区别,并希望有人对此进行评论。另外,如果我使用WebSockets,是否应仅用它来接收信息并发送POST请求以完成其他所有通信,还是所有通信都应通过WebSocket完成?

此外,如果我还想制作Web客户端,那么在WebSockets和长轮询之间是否还有其他要考虑的因素?


11
你还可以使用推送通知来通知客户端有新数据。我认为这比你考虑的两个解决方案更有效(从电池方面考虑)。 - pteofil
1
如果用户仍然在应用程序中,那么这将如何运作? - acidic
5
当你收到推送通知时,应用程序会在应用内通知你。 - pteofil
你能解决它吗?如果可以,你能告诉我们怎么做吗? - Nikhil Gupta
2个回答

6

对于其他可能有疑问的人,这取决于事件之间典型交互持续多长时间。

Websocket:如果超过几十秒,保持一个websocket连接不是特别高效的(更不用说如果应用程序失去焦点,它会断开连接)。

长轮询:这迫使在服务器负载和知道发生更改的速度之间做出权衡。

推送通知:虽然这可能在技术上更加复杂,但我认为这确实是最好的解决方案,因为:

  • 通知可以在事件发生后几乎立即发送(并传递)
  • 没有待机服务器负载(来自开放的Websockets或“现在怎样?”查询)-这在您的用户基数增长时尤为重要
  • 您可以覆盖在用户正在应用程序中时发生通知的情况下会发生什么

3

我是否应该只使用它来接收信息和发送POST请求,以处理其他的事情?

是的,你应该只使用WebSockets来获取实时更新,并使用REST API来进行BREAD(浏览、读取、编辑、添加和删除)操作。

所有的通信都应该通过WebSocket吗?

简单回答:不应该。

查看PieSocket的文章,了解更多关于WebSockets最佳使用案例的信息:什么是WebSocket:介绍和用法


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