基于回合的游戏服务器的websockets和长轮询之间的差异

时间:2015-07-30 04:28:11

标签: ios web-services rest websocket long-polling

我正在为iOS游戏编写服务器。游戏是基于回合制的,服务器需要将信息推送到客户端的唯一时间是通知对手的移动。

我很好奇是否有人可以评论使用websockets和长轮询之间的性能和易于实现的差异。另外,如果我使用websockets,我应该只使用它来接收信息并发送其他所有内容的POST请求,还是应该通过websocket进行所有通信?

此外,如果我有兴趣创建一个Web客户端,那么在websockets和长轮询之间还有什么需要考虑的吗?

2 个答案:

答案 0 :(得分:134)

  

什么是长轮询?

enter image description here 传统轮询技术的一种变体,允许模拟从服务器到客户端的信息推送。通过长轮询,客户端以与普通轮询类似的方式从服务器请求信息。

  • 如果服务器没有可用于客户端的任何信息, 服务器保留请求,而不是发送空响应 并等待一些信息可用。
  • 一旦信息可用(或在适当的超时后), 完整的响应发送给客户端。客户通常会 然后立即从服务器重新请求信息,以便 服务器几乎总会有一个可用的等待请求 可用于传递数据以响应事件。

    在web / AJAX环境中,长轮询也称为 Comet编程。

  

Websockets怎么样?

enter image description here WebSockets提供客户端和服务器之间的持久连接,双方都可以使用它来开始随时发送数据。

  • 客户端通过已知的进程建立WebSocket连接 作为WebSocket握手。此过程从客户端开始 向服务器发送常规HTTP请求。
  • 此请求中包含一个升级标头,用于通知服务器 客户希望建立WebSocket连接。

结论

如果需要实时通信,您可以选择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?

long polling in objective-C

Websocket Introduction

Websocket Vs Long Polling

Using Websockets in Apps

Websocket Application

PushTechnology-Long Polling

答案 1 :(得分:1)

对于可能想知道的其他人来说,它可能取决于事件之间的典型交互持续多长时间?

Websocket:任何超过几十秒的时间,我认为保持 websocket 打开不是特别有效(更不用说 IIRC 如果应用程序失去焦点它无论如何都会断开连接)< /p>

长轮询:这迫使在服务器负载(现在有什么新东西?现在怎么样?...)和知道发生变化的速度之间进行权衡。

推送通知:虽然这在技术上实施起来可能更复杂,但它确实是 IMO 的最佳解决方案,因为:

  • 几乎可以在事件发生后立即发送(和传递)通知
  • 没有 standby 服务器负载(来自开放的 websocket 或“现在怎么样?”查询) - 随着您的使用基础不断增长,这一点尤其重要
  • 您可以覆盖如果用户在应用内时收到通知会发生什么