很多应用譬如监控、即时通信、即时报价系统都需要将后台发生的变化实时传送到客户端而无须客户端不停地刷新、发送请求.
基于客户端套接口的 “ 服务器推 ” 技术
这种方案实现的基础是:
Flash 提供了 XMLSocket 类。
JavaScript 和 Flash 的紧密结合:在 JavaScript 可以直接调用 Flash 程序提供的接口。
2.Java Applet 套接口
在客户端使用 Java Applet,通过 java.net.Socket 或 java.net.DatagramSocket 或 java.net.MulticastSocket 建立与服务器端的套接口连接,从而实现 “服务器推 ”。
基于 HTTP 长连接的 “ 服务器推 ” 技术
1.基于 AJAX 的长轮询( long-polling )方式
2.基于 Iframe 及 htmlfile 的流( streaming )方式
Comet
Comet的客户端有基于 javascript的 cometd-dojox,基于 java的 cometd-jetty,基于 flex的 flexcomet。
Server端有基于 java的 comtd-java和 ibm的 Feature Pack for Web 2.0。
Comet的主要逻辑如下:
用基于 http的长连接来进行消息通信。客户端先向服务器端发送一个 httprequest,服务器端接收到后,阻塞在那边,等服务器有消息的时候,则返回一个 httpresponse给客户端,客户端收到后,断开连接,紧接着再发第二个 httprequeest,以此反复进行,保持这个“长连接”。期间,如果连接超时,那么会断开重连,以保持连接。
Bayeux协议
Bayeux协议是基于 Json格式的, client和 server直接的发布订阅消息协议。这个协议基于 http,允许在普通 http情况下,参与者之间的异步消息。
一般情况下,在 http协议中, client要想获得 server的消息,必须先自己发送一个 request,然后 server才会给予 response。而 Bayeux协议改变了这个情况,他允许 server端异步 push自己的消息到 client端。从而实现了 client和 server之间的双向操作模式( bi-directional communications)。
主要逻辑如下:
Client和 server直接先通过握手协议,互相发送 request和 response进行握手;如果握手成功,那么 client再向 server发送 connect request, server接着发送 connect response,如果这步也成功,那么 client和 server之间的 Bayeux协议连接成功。否则,要返回开始重新进行握手协议。
BC ----------------------------------------- BS
| ------------------ handshake request ---> |
| <-- unsuccessful handshake response ----- |
| ------------------ handshake request ---> |
| <-- successful handshake response ------- |
| -------------------- connect request ---> |
~ ~ wait
| <------ connect response ---------------- |
| -------------------- connect request ---> |
| <---- unsucessful connect response ------ |
| ------------------ handshake request ---> |
| <-- successful handshake response ------- |
| -------------------- connect request ---> |
~ ~ wait
| <------ connect response ---------------- |
Ajax Push Engine是一个全功能的开源Ajax Push框架。Ajax Push Engine包含一个comet服务器和一组JavaScript框架,二者结合起来可以打造出一个完整的基于Ajax的comet解决方案。Ajax Push Engine可以再不安装任何客户端程序的前提下实时与浏览器进行数据交互。随着web2.0时代的买进,ajax应用逐渐深入人心,笔者首次接触到 comet应用应该是在Java 下著名的Servlet 容 器Jetty6.1.1x的版中,该版本自带了一个comet的demo,是一个无刷新的聊天室应用。Ajax Push Engine曾经被命名为Ajax Chat Engine始与2006年,后来开发者决定创造出一个更优秀的基于Ajax Push 技术的版本,于是Ajax Push Engine诞生了。
Ajax Push Engine 拥有如下四大特点:
Ajax Push Engine下载 地址:
http://nocache.ape-project.org/files.php?f=APE-Project_1.0.tar.gz&v=1.0
Ajax Push Engine下载 (pdf文档,适合入门学习)
http://www.ape-project.org/var/comics_pdf/APE-Comics_Chapter1.pdf
Ajax Push Engine在线文档:
http://www.ape-project.org/docs/
http://www.ape-project.org/comics/1/Chapter-I-common-let-s-push.html
Ajax Push Engine官方主页:
http://www.ape-project.org
CometD 是一个提供多种开发语言的Bayeux项目,可支 持JavaScript, Java, Perl, Python等语言,由Dojo基金会提供支持。CometD 是一个使用了 Ajax push技术的可伸缩的基于HTTP的事件路由总线程序,这项技术也叫 Comet。
近日,CometD发布了1.0 最终版本,而且对2.0版本的开发也在展开。
http://www.iteye.com/topic/89158
http://www.javaworld.com/jw-03-2000/jw-03-pushlet.html
http://www.pushlets.com/