我正在为iOS游戏编写服务器。游戏是基于回合制的,服务器需要将信息推送到客户端的唯一时间是通知对手的移动。
我很好奇是否有人可以评论使用websockets和长轮询之间的性能和易于实现的差异。另外,如果我使用websockets,我应该只使用它来接收信息并发送其他所有内容的POST请求,还是应该通过websocket进行所有通信?
此外,如果我有兴趣创建一个Web客户端,那么在websockets和长轮询之间还有什么需要考虑的吗?
答案 0 :(得分:134)
什么是长轮询?
传统轮询技术的一种变体,允许模拟从服务器到客户端的信息推送。通过长轮询,客户端以与普通轮询类似的方式从服务器请求信息。
一旦信息可用(或在适当的超时后), 完整的响应发送给客户端。客户通常会 然后立即从服务器重新请求信息,以便 服务器几乎总会有一个可用的等待请求 可用于传递数据以响应事件。
在web / AJAX环境中,长轮询也称为 Comet编程。
Websockets怎么样?
WebSockets提供客户端和服务器之间的持久连接,双方都可以使用它来开始随时发送数据。
结论:
如果需要实时通信,您可以选择websockets。
但是在Long Polling中:
Web客户端和Web服务器之间保持连接,这样当服务器有新信息时,它就可以将其推送到客户端。然后该请求就完成了。然后在客户端和服务器之间进行新请求,然后等待来自服务器的另一个更新。由于HTTP / 1.1保持活动,相同的TCP连接通常在多个请求中持续打开。
参考文献和其他注意事项:
PubNub long polling vs sockets - mobile battery life
What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?
答案 1 :(得分:1)
对于可能想知道的其他人来说,它可能取决于事件之间的典型交互持续多长时间?
Websocket:任何超过几十秒的时间,我认为保持 websocket 打开不是特别有效(更不用说 IIRC 如果应用程序失去焦点它无论如何都会断开连接)< /p>
长轮询:这迫使在服务器负载(现在有什么新东西?现在怎么样?...)和知道发生变化的速度之间进行权衡。
推送通知:虽然这在技术上实施起来可能更复杂,但它确实是 IMO 的最佳解决方案,因为:
standby
服务器负载(来自开放的 websocket 或“现在怎么样?”查询) - 随着您的使用基础不断增长,这一点尤其重要