代码改变世界

Server push基础

2011-12-24 14:22  E骑士  阅读(431)  评论(1编辑  收藏  举报

首先祝各位园友圣诞快乐 !

1.  基本思想

  Server Push(服务器推送)是把浏览器主动查询信息改为服务器主动发送信息,这就需要在服务器与浏览器之间建立一个长连接保持状态。

2.  HTTP基础

•  HTTP连接是无状态的,我们可以使用cookie和session来保持“状态”,无状态并不意味着HTTP不能保持TCP连接,也不意味着说HTTP使用的是UDP协议。HTTP是基于TCP的底层运输协议,所以我们使用HTTP协议不用担心数据丢失,也不用关心TCP如何保证可靠传输,这正是分层体系的优势。

•  从HTTP/1.1起,默认都开启了Keep-Alive,保持连接状态。简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接,以前的版本每个请求都将被创建一个新的客户端->服务器的连接。但是Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。

3. Server Push方式

• 基于客户端套接口

          采用RMICORBA或者自定义TCP/IP信息的applet来实现 。 

• Comet:

          基于 HTTP 长连接、无须在浏览器端安装插件的技术

4. Comet应用实现模型

(更详细介绍,请见http://www.ibm.com/developerworks/cn/web/wa-lo-comet/#resources

• 基于 AJAX 的长轮询(long-polling

       即服务端阻断前一次对客户端的回应,在事件发生后将事件内容绑定在回应中返回给客户端,同时回应结束,此时客户端立即发送第二次请求,服务器阻塞回应等待下一次事件发生。

• 基于 Iframehtmlfile的流(streaming)方式

      通过在 HTML 页面里嵌入一个隐蔵帧,然后将这个隐蔵帧的 SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。即服务器阻断客户端的回应,服务器没有关闭回应而是一直保留这这个到客户端的输出流。

5. 与客户端拉曳(Client Pull)的比较

客户端拉曳:客户端定时去查询服务器上的最新数据。

          优点:服务器完全能够控制客户端更新数据的时间和频率 。 

          缺点:保持连接状态会浪费服务器端的资源。服务器推送还比较容易中断 

6 .  WebSocket

WebSocket protocol 是HTML5一种新的协议(protocol)。它是实现了浏览器与服务器全双工通信(full-duplex)。

在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即使服务带来了两大好处:

• Header

互相沟通的Header是很小的-大概只有 2 Bytes

• Server Push

服务器可以主动传送数据给客户端

7.  总结

Server Push技术在移动Web项目中起着越来越重要的作用,在web 2.0时代,细节影响着用户体验。在以后的时间,本人会陆续对Comet及WebSocket展开更详细的讨论,具体范围有

• Comet与RIA(Silverlight)结合的应用框架实现

• WebSocket的.NET实现,主要是开源框架SuperSocket的介绍