服务器推技术--基于http长连接
1.浏览器作为 Web 应用的前台,自身的处理功能比较有限。浏览器的发展需要客户端升级软件,同时由于客户端浏览器软件的多样性,在某种意义上,也影响了浏览器新技术的推广。 在 Web 应用中,浏览器的主要工作是发送请求、解析服务器返回的信息以不同的风格显示。AJAX 是浏览器技术发展的成果,通过在浏览器端发送异步请求,提高了单用户操作的响应性。但 Web 本质上是一个多用户的系统,对任何用户来说,可以认为服务器是另外一个用户。现有 AJAX 技术的发展并不能解决在一个多用户的 Web 应用中,将更新的信息实时传送给客户端,从而用户可能在“过时”的信息下进行操作。而 AJAX 的应用又使后台数据更新更加频繁成为可能。
3.基于 HTTP 长连接、无须在浏览器端安装插件的“服务器推”技术为“Comet”
下面介绍两种comet应用的两种实现方式
a.基于ajax的长轮询方式
它与传统ajax应用模型的区别在于:服务端会阻塞请求直到有数据需要传递或超时才会返回。
客户端javascript处理函数会在接收,处理服务端发送的数据后,再次发送请求,重新连接。
当客户端在接收处理服务端发送的数据时,服务端可能有最新的数据到达;这些信息会被服务端保存,直到客户端
重新建立连接,客户端会一次把当前服务端所有数据一次取回。
在这种长轮询方式下,客户端是在 XMLHttpRequest 的 readystate 为 4(即数据传输结束)时调用回调函数,进行信息处理。当 readystate 为 4 时,数据传输结束,连接已经关闭。当readystate 为 3 时(数据仍在传输中),客户端可以读取数据,从而无须关闭连接,就能读取处理服务器端返回的信息。(IE 在 readystate 为 3 时,不能读取服务器返回的数据,目前 IE 不支持基于 Streaming AJAX)
b.基于 Iframe 及 htmlfile 的流(streaming)方式
frame 是很早就存在的一种 HTML 标记, 通过在 HTML 页面里嵌入一个隐蔵帧,然后将这个隐蔵帧的 SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据
使用 iframe 请求一个长连接有一个很明显的不足之处:IE、Morzilla Firefox 下端的进度栏都会显示加载没有完成,而且 IE 上方的图标会不停的转动,表示加载正在进行
...未完待续