Comet: ajax server push

狄玉书
2023-12-01

转自:http://www.fomly.cn/20090206/comet_ajax_server_push/

Comet: ajax server push

ajax, java Add comments

1、什么是Comet?

了解Comet首先说明一下服务器推技术,由于受HTTP协议天生的缺陷——无状态,客户端无法像基于Socket的C/S程序一样实现监听,只能是客户端主动发出请求,服务器应答。而服务器不能及时把数据主动返回给客户端。为了解决这个问题Philip McCarthy提出了Comet这种技术解决方案。在文章中作者把这种通过长链接,服务器端及时推送数据给客户端,即文中的Low Latency Data for the Browser(针对浏览器低潜伏期数据)的技术称为Comet。

它可应用于一些对数据及时性要求较高的系统性

  • 监控系统:后台硬件热插拔、LED、温度、电压发生变化;
  • 即时通信系统:其它用户登录、发送信息;
  • 即时报价系统:后台数据库内容发生变化;
  • 最近比较热门的Web游戏等式

2、分析Comet

首先针对在B/S中上能实现类似功能的技术进行一下介绍:

a、Flash+Javascript:由于Flash能使用XMLSocket,且Javascript可以调用它的接口与服务器端的套接口进行通信。

b、Java Applet:Java小程序,相当于页面中的Java程序,使用Socket和服务器通信当然也是没问题的。

c、Ajax Poll:通过轮询循环对服务器发请求,根据服务器应答判断是否数据变动。

d、Comet:建立长连接,服务器及时推送数据。其中又分为Ajax长轮询和iframe流方式。

接下来我们对这几种技术进行一个对比

Flash+Javascript
JavaApplet
Ajax Poll
Comet

协议类型
Socket
HTTP

支持环境[1]
安装Flash Player插件
安装JRE

端口限制
非80端口,受系统及防火墙限制
80端口,基本无限制

线程限制
受系统可用端口数限制

受浏览器线程限制,IE默认同一域最大线程为2,所以然推荐长连接线程最好不超过1个

其它
无法自动穿墙面
JS无法使用JavaApplet返回的结果来更新HTML
非长轮询,由于为定时请求,不能判断服务器端是否有更新,频繁请求,返回过多无用应答,浪费服务器资源。受轮询间隔时间限制,可能影响数据的及时性。
长时间占用服务器线程(已有针对该方案的服务器端解决方式,如Jetty6容器,最新的Tomcat6也进行了优化),使用iframe流方式时浏览器进度显示为一直在加载。(Google工程师已有解决IE加载问题的对应ActiveX)

[1]除JavaApplet外都需要浏览器中对JS的支持。

3、实现Comet
开源pushlet框架、DWR2使用Dojo与容器Jetty6/Tomcat6结合,具体实现见下面参考文档

4、Comet实例

5、参考文档
Comet:基于 HTTP 长连接的“服务器推”技术

Ajax for Java developers: Write scalable Comet applications with Jetty and Direct Web Remoting中文

Tomcat 6 -Advanced IO and Tomcat6

前两篇IBM技术文章后面也有大量参考资料

Related posts:

  1. APE – Ajax Push Engine APE is an open source technology allowing to exchange data...
  2. Server-driven Rich Web Applications in Pure Java – IT Mill Toolkit 从文章题目可以看出,这个是基于Java的服务器端驱动的RIA框架。用到了Google的GWT。 文章中提到Write Java, Nothing Else,如果不相信看下面经典的HelloWorld import com.itmill.toolkit.ui.*; public class HelloWorld...

Related posts brought to you by Yet Another Related Posts Plugin.

 类似资料:

相关阅读

相关文章

相关问答