长轮询和Comet

长轮询方式是由前端定时发起AJAX请求,若请求到数据则把数据显示出来。
comet方式是由客户端与服务器端发起一个长连接,然后客户端通过监听事件的方式,来对服务器端返回的数据作出响应和处理。
实时性要求不高使用长轮询,比如微博;实时性要求较高使用comet,比如聊天室。


用firebug调试一下weibo.com的网络请求可以发现,微博用的是轮询来实现消息提醒的,应该是用set timer隔个30秒或一分钟去服务器进行查询。和即时通信的web应用不同,微博提醒实时性要求不高,所以用轮询方式比较合理,没有必要用长连接。

没错,不是非要使用长连接的。长连接对象保存在服务器,要占用一定的内存。降低了服务器的并发。
除非实时性要求非常高的应用。例如WEB IM,否则不需要长连接。


如果你的需求是要求服务器推送,而且不用考虑浏览器兼容性,并且客户浏览器支持HTML5中的SSE,Server-sent-event,也就是“服务器发送事件”的话,也可以考虑采用他,制作起来比Comet要简单很多,效果也要好很多
MDN上有一篇介绍SSE的文章  https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events


Comet软件  http://www.oschina.net/search?scope=project&q=Comet

《实战 Comet 应用程序开发》  http://www.ibm.com/developerworks/cn/web/wa-lo-w2fpak-comet/

《Comet:基于 HTTP 长连接的“服务器推”技术》  http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

posted on 2013-12-11 00:23  davidkam  阅读(430)  评论(0编辑  收藏  举报