AJAX轮询 vs. WebSockets移动性能

10

我正在使用Django开发一个网站,希望能够实现某种准实时的更新系统。

由于该网站面向移动设备,我想知道定期轮询服务器以获取更改(比如每5秒钟)与使用某种Websocket实现的性能比较,就像http://codysoyland.com/2011/feb/6/evented-django-part-one-socketio-and-gevent/中所示。

对于电池寿命来说,这种差异是否可以忽略不计?从代码层面上看,AJAX实现似乎也更简单。


3
你可能也想了解一下“彗星”式 Ajax,它会在客户端打开一个连接并保持连接时间(大约 30 秒左右),这样服务器就可以在事件发生时立即发送响应。如果在这 30 秒内没有任何事件发生,服务器就会发送一个“没有事件发生”的响应,客户端不做任何改变,并再次向服务器发送请求。 - uscere90
1
Socket.io会在客户端断开连接时立即中断websocket连接,因此存在持续通信的情况。我猜想,与间歇性轮询相比,保持持续通信会使用更多资源,从而影响电池寿命。 - Robert
使用彗星式的Ajax是否需要一个额外的服务器与提供网站服务的服务器并行运行? - CCSab
2个回答

2
答案是“要看情况”。如果你的目标是针对已知良好的WebSocket实现的移动设备,那么就选择这种方式。目前可能只有iOS4.2或更高版本的iPhone/iPad具有良好的实现。
对于其他所有人,您将无论如何进行轮询,所以我建议采用这种方式。
我已经完成了几个近实时服务(<10秒延迟),使用轮询可以正常工作。我不会将其用于聊天引擎,但对于大多数其他事情来说,它都可以。

1
从电池方面来看,我不认为它们会有很大的区别。不过我建议使用socket.io,因为你只需要使用socket.io,它会尝试使用WebSockets,如果浏览器不支持,则退回到Ajax请求。

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