基于回合的游戏服务器的网络套接字和长时间轮询之间的区别


89

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

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

此外,如果我也想制作一个Web客户端,在websocket和长时间轮询之间是否还有其他需要考虑的事项?


6
您还可以使用“推送通知”将新数据通知客户端。我相信比您考虑的两种解决方案更有效(在电池方面)。
pteofil 2015年

1
如果用户仍在应用程序中怎么办?
酸性

4
当您收到推送通知时,也会在应用程序中收到通知。
pteofil

Answers:


177

什么是长轮询?

在此处输入图片说明 传统轮询技术的一种变体,它可以模拟从服务器到客户端的信息推送。对于长轮询,客户端以与普通轮询类似的方式从服务器请求信息。

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

    在Web / AJAX上下文中,长轮询也称为Comet编程。

Websockets呢?

在此处输入图片说明 WebSocket在客户端和服务器之间提供了持久的连接,双方都可以随时使用它开始发送数据。

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

结论

如果需要实时通信,则可以选择websocket。

但是在长轮询中:

Web客户端和Web服务器之间的连接保持打开状态,以便服务器获取新信息时可以将其推送到客户端。然后该请求完成。然后在客户端和服务器之间发出新请求,然后等待服务器进行另一次更新。由于HTTP / 1.1保持活动,通常会在多个请求中持久打开同一TCP连接。

参考资料和其他注意事项:

PubNub长轮询与插座-移动电池寿命

什么是长轮询,Websocket,服务器发送事件(SSE)和Comet?

在Objective-C中进行长时间轮询

Websocket简介

Websocket与长轮询

在Apps中使用Websocket

Websocket应用

推技术-长轮询

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.