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方式
• 基于客户端套接口 :
采用RMI、CORBA或者自定义TCP/IP信息的applet来实现 。
• Comet:
基于 HTTP 长连接、无须在浏览器端安装插件的技术。
4. Comet应用实现模型
(更详细介绍,请见http://www.ibm.com/developerworks/cn/web/wa-lo-comet/#resources)
• 基于 AJAX 的长轮询(long-polling)
即服务端阻断前一次对客户端的回应,在事件发生后将事件内容绑定在回应中返回给客户端,同时回应结束,此时客户端立即发送第二次请求,服务器阻塞回应等待下一次事件发生。
• 基于 Iframe及 htmlfile的流(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的介绍