转自:http://blog.163.com/bailin_li/blog/static/17449017920124811524364/ 需求: 我想做个会员站内通知的功能。不想用以前的ajax查询,听说有个推技术。以下文章介绍的不错,来自转载, ================================================================================== PHP中Push(推送)技术的探讨   [ http://vistaswx.com/blog/article/php-server-push] 1. 什么是Server Push 2. 如何实现Push 1) Ajax 长轮询 核心:  客户端发起一个ajax请求,服务端将请求搁置(pending)或者说挂起,直到到了超时时间(timeout)或需要推送时返回;客户端则等待ajax返回后处理数据,再发起下一个ajax请求。优点:  兼容性较高,实现简单缺点:  对于php这种语言来说,如果要做到实时,那么服务端就要承受大得多的压力,因为搁置到什么时候往往是不确定的,这就要php脚本每次搁置都进行一个while循环。注意:  浏览器有连接数限制。我得出的结论是如果当前页面上有一个ajax请求处于等待返回状态,那么其他ajax请求都会被搁置(Chrome, Firefox已测)。如果页面有一般ajax需求怎么办?解决方法是开个框架,框架中使在另一个域名下进行Comet长轮询,需要注意跨域问题。PHP实现:  Jquery+php实现comet相关: Ajax跨域和js跨域解决方案2) Frame 长连接 核心:  Frame中发起一个普通请求,服务器将其搁置;需要推送时输出直接执行优点:  与1一样具有高兼容特性缺点:  最大的问题是如果框架在载入,那么浏览器就好一直显示“载入中”,这就弱爆了(解决方法参见文末的相关阅读资源)。同样服务器也要能hold住大量循环……另外,是否有同域连接限制没测试。3) Flash/HTML5 WebSockets 优点:  标准化, RealTime, Push缺点:  服务器需要能应对WebSockets;还有如果既没有Flash又不支持HTML5的怎么办?PHP实现:  Start Using HTML5 WebSockets Today6) 使用兼容封装层(socket.io) 优点:  高度封装,编写非常容易,几乎不需要关心如何去实现的。实时,超低负载,高并发。缺点:  其实算不上缺点,socket.io的服务器端要求是node.js,而不是php。个人看法:  如果你是独立主机,能运行程序,那么socket.io配合node.js是个非常高效的选择。为什么呢?因为它还可以避免php的服务端高负载。3. 结束语 不过无论哪种用途,配合那些非阻塞语言或许才是最好的选择。 4. 相关阅读 Start Using HTML5 WebSockets Today comet研究[ http://lync.in/research-on-comet/]浏览器通用性,对各种不同实现结构模型的支持。 长连接对于服务器资源的占用,以及服务器的承受能力 。基于AJAX的轮询(long polling)方式 目前,开心网采用的是这一种方式。   基于iframe及htmlfile的流(streaming)方式 目前,人人网和GTalk采用的是这种方式。 数据交换的格式。由于数据交换的形式是推送,所以不可避免的会有指令队列的存在,于是数据结构是需要前后台详细约定的,执行指令和数据指令都需要有严格的界定,一般来说,JSON的方案比较普遍。  浏览器本身的连接数限制。HTTP 1.1规范中声明客户端不应该与服务器端建立超过两个的 HTTP 连接,而IE又严格遵守了这一点,所以前台在处理请求的时候需要谨慎控制请求的数量。 这里有一个php的comet的例子How to implement COMET with PHP。这个要看看 这是developerWorks上对于Comet的介绍。 这是当前Comet的服务器端的一些产品及介绍。 当然,Wikipedia上面对Comet的解释也是非常详尽。 还可以看看AjaxPatterns上面的一些介绍。 最后,CometDaily是个值得去了解最新Comet新闻和知识的地方。 ===================================================================================================== Comet:基于 HTTP 长连接的“服务器推”技术   [http://www.ibm.com/developerworks/cn/web/wa-lo-comet/] ps:上述文章应该够你看明白的了。使用一种吧。但我现在还没有在项目用推技术,原因,还没有来得及折腾,但在本地测试都很正常 。 以下提供protype 和 jquery的 +php实现的代码例子。[例子代码来自网上,已测试通过。好用]  
 
 
  
运维网声明 
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003运维网