服务器推送

来源:互联网 发布:极客范树莓派网络配置 编辑:程序博客网 时间:2024/03/29 05:53

服务器推送方案,参考http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

一、基于插件的套接口

       Flash XMLSocket:JavaScript 可以直接调用 Flash 程序提供的XMLSocket接口。

      Java Applet套接口:通过 java的套接口与服务器端的套接口连接,但不能与JavaScript 交互。

二、基于 HTTP 长连接(Comet)

       基于AJAX 的长轮询(long-polling)方式:

               1、服务器端会阻塞请求直到有数据传递或超时才返回。
               2、客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。(要重新连接是因为,在一些浏览器中连接得先关闭了才能读取消息)
               3、当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

               Mozilla Firefox 提供了对 Streaming AJAX 的支持, 即 readystate 为 3 时(数据仍在传输中),客户端可以读取数据,从而无须关闭连接,就能读取处理服务器端返回的信息。IE 在 readystate 为 3 时,不能读取服务器返回的数据,目前 IE 不支持基于 Streaming AJAX。


基于 Iframe 及 htmlfile 的流(streaming)方式:
在 HTML 页面里嵌入一个iframe,将SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。这些数据是Javascript 函数的调用,如“<script type="text/javascript">js_func(“data from server ”)</script>”。每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建时关闭(一些防火墙常被设置为丢弃过长的连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来的连接)。
使用 iframe 请求一个长连接有一个很明显的不足之处:IE、Morzilla Firefox 下端的进度栏都会显示加载没有完成,而且 IE 上方的图标会不停的转动,表示加载正在进行。Google 的天才们使用一个称为“htmlfile”的 ActiveX 解决了在 IE 中的加载显示问题。


三、Web Socket

长连接的缺点:会长期占用浏览器最大连接数的指标。
Comet 开源框架:Pushlet
在另外一篇博文中整理

四、server-sent event(SSE)
SSE是HTML5浏览器提供的实现Comet交互的API。

0 0
原创粉丝点击