烈火建站学院文档
1.反转AJAX:服务流应用到AJAX,就是所谓的反转AJAX 或者COMET 。它使得服务器在某事件发生时可以发送消息给客户端,而不需要客户端显式的请求。目标在于达到状态变化的实时更新。COMET使用了HTTP/1.1中的持续连接的特性。 页面中嵌入iframe iframe的地址指向一个长连接 即时性最高, 目前Google的gtalk就是采用的这种方式,而且使用htmlfile巧妙的解决了ie浏览器一直显示下载条的问题. 不过问题也很严重.在IBM的帮助文档上也说明了不要在同一客户端同时使用超过两个的 HTTP 长连接,因为 HTTP 1.1 规范中规定,客户端不应 该与服务器端建立超过两个的 HTTP 连接,否则第三个页面就会卡在那 而且网上有文章说服务器应用程序CPU使用率是拉取方式 的7倍(ps:好像apache对这个支持的也不太好)
2.长时间轮询:也就是所谓的异步轮询,这种方式是纯服务器端推送方式和客户端拉取方式的混合。它是基于BAYEUX协议的。 这个协议遵循基于主题的发布——订阅机制。在订阅了某个频道后,客户端和服务器间的连接会保持打开状态,并保持一段事先定义好的时间。如果服务器端没有事 件发生,而发生了超时,服务器端就会请求客户端进行异步重新连接。如果有事件发生,服务器端会发送数据到客户端,然后客户端重新连接。 其实也差不多 ,主要是在服务器端阻塞 ,等有新数据或者超时后返回 ,客户端收到信息后重新发起请求 不过及时性高些, 网易blog应该就是用的这种方式,之前我还以为是单纯的轮询的,测试了一下才发现还用到长轮询了 http://61.135.253.223/cometd?message=[{"channel":"/meta/connect","clientId":"asdfasdf","connectionType":"long-polling","id":"1","callback":"testcb"}]&56ee6-e806eee-be79-d8d01a6f7
3.通过js控制HTTP轮询拉取方式: 个人感觉如果一定要实现这个功能的话,这个最可行的办法. 网上对这种方法的缺点说明一般是:如果拉取的时间间隔大于数据更新的时间间隔,就会发生一些数据的遗失。而如 果小于数据更新的时间间隔,网络性能就会受到影响. 这里应该是说的那种即时性要求很高的应用.而我们这里不需要那么及时,10分钟应该就可以满足要求.所有性能上应该没有什么问题.(300人同时在线,每秒的并发访问也不会太大,毕竟不可能同时去请求.高峰期能有个20/s 就算不错了 )
(编辑:ASP站长网)
|