我正在为iOS游戏编写服务器。游戏是基于回合的,服务器唯一需要向客户端推送信息的时间是通知对手的移动。
我很好奇是否有人可以评论使用websockets和长时间轮询之间的性能和易实现性差异。另外,如果我使用了websocket,我应该只使用它来接收信息并发送POST请求以进行其他所有操作,还是应该通过websocket进行所有通信?
此外,如果我也想制作一个Web客户端,在websocket和长时间轮询之间是否还有其他需要考虑的事项?
我正在为iOS游戏编写服务器。游戏是基于回合的,服务器唯一需要向客户端推送信息的时间是通知对手的移动。
我很好奇是否有人可以评论使用websockets和长时间轮询之间的性能和易实现性差异。另外,如果我使用了websocket,我应该只使用它来接收信息并发送POST请求以进行其他所有操作,还是应该通过websocket进行所有通信?
此外,如果我也想制作一个Web客户端,在websocket和长时间轮询之间是否还有其他需要考虑的事项?
Answers:
什么是长轮询?
传统轮询技术的一种变体,它可以模拟从服务器到客户端的信息推送。对于长轮询,客户端以与普通轮询类似的方式从服务器请求信息。
一旦信息可用(或在适当的超时后),就会向客户端发送完整的响应。然后,客户端通常通常会立即从服务器重新请求信息,以便服务器几乎总是会有一个可用的等待请求,服务器可以使用该请求来响应事件。
在Web / AJAX上下文中,长轮询也称为Comet编程。
Websockets呢?
WebSocket在客户端和服务器之间提供了持久的连接,双方都可以随时使用它开始发送数据。
结论:
如果需要实时通信,则可以选择websocket。
但是在长轮询中:
Web客户端和Web服务器之间的连接保持打开状态,以便服务器获取新信息时可以将其推送到客户端。然后该请求完成。然后在客户端和服务器之间发出新请求,然后等待服务器进行另一次更新。由于HTTP / 1.1保持活动,通常会在多个请求中持久打开同一TCP连接。
参考资料和其他注意事项: