Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。
在线Demo体验
http://www.comet4j.org:8080/comet4j/
功能特性
推送消息广播。
推送定向消息。
提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。
消息缓存机制,确保长轮询工作模式下不丢失消息。
客户端正常下线,服务端可立即感知。
客户端异常停止工作,服务端可定时检查并感知。
以注册通道应用的方式,让开发者对框架功能进行扩展,实现自己的应用。
框架特性
独立小巧,不依赖于第三方包。
与应用紧密集成,无需独立应用或服务器。
与Session无关的连接机制,为开发人员提供最大程度的功能可控性。
面向事件编程,客户端与服务器端均为事件驱动开发模式,提供了良好的可扩展性机制。
各项性能参数均可配置。
支持多种主流浏览器,并支持Air应用环境。
服务器支持情况
Tomcat6、Tomcat7
浏览器支持情况
支持XMLHTTPRequest对象的浏览器均可支持长轮询工作模式,但不一定能够支持长连接。
浏览器/平台
长轮询
长连接
Internet Explorer
6,7,8,9
√
X
FireFox
3.0+(更底版本未知)
√
√
Chrome
7.0+(更底版本未知)
√
√
Safari
5+(更底版本未知)
√
√
Opera
11.10+(更底版本未知)
√
X
Air
1.5+(更底版本未知)
√
√
IOS(Iphone/Ipad)
3.1+(更底版本未知)
√
√
Android
未测试
未知
未知
BlackBerry
未测试
未知
未知
?
class="Apple-converted-space">?
?
?
?
?
?
准备工作
1.下载服务端jar文件
2.下载客户端js文件
3.修改服务器配置文件
客户端
服务端
配置
准备工作
1.下载服务端jar文件
Comet4J目前仅支持Tomcat6、7版本,根据您所使用的Tomcat版本下载【comet4j-tomcat6.jar】或【comet4j-tomcat7.jar】文件放置到WEB项目的WEB-INF\lib目录下。
2.下载客户端js文件
下载【comet4j.js】到您的项目中,比如:WebContent\js目录下。
3.修改服务器配置文件
因为Comet4J工作在NIO方式下,所以我们需要调整服务器连接器配置,更换为NOI连接器。 打开server.xml文件将找到原先的连接器配置:
?
替换为:
?
客户端
我们利用Comet4J开发一个每隔一秒向所有客户端推送服务器的剩余内存大小。 helloworld.html
Comet4J Hello Worldfunction init(){
??????? var kbDom = document.getElementById('kb');
??????? JS.Engine.on({
??????????????? hello : function(kb){//侦听一个channel
??????????????????????? kbDom.innerHTML = kb;
??????????????? }
??????? });
??????? JS.Engine.start('conn');
}
??????? 剩余内存:...KB
服务端
helloworld.java
package org.comet4j.demo.helloworld;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.comet4j.core.CometContext;
import org.comet4j.core.CometEngine;
public class HelloWorld implements ServletContextListener {
??????? private static final String CHANNEL = "hello";
??????? public void contextInitialized(ServletContextEvent arg0) {
??????????????? CometContext cc = CometContext.getInstance();
??????????????? cc.registChannel(CHANNEL);//注册应用的channel
??????????????? Thread helloAppModule = new Thread(new HelloAppModule(), "Sender App Module");
??????????????? helloAppModule.setDaemon(true);
??????????????? helloAppModule.start();
??????? }
??????? class HelloAppModule implements Runnable {
??????????????? public void run() {
??????????????????????? while (true) {
??????????????????????????????? try {
??????????????????????????????????????? Thread.sleep(1000);
??????????????????????????????? } catch (Exception ex) {
??????????????????????????????????????? ex.printStackTrace();
??????????????????????????????? }
??????????????????????????????? CometEngine engine = CometContext.getInstance().getEngine();
??????????????????????????????? engine.sendToAll(CHANNEL, Runtime.getRuntime().freeMemory()/1024);
??????????????????????? }
??????????????? }
??????? }
??????? public void contextDestroyed(ServletContextEvent arg0) {
??????? }
}
配置
web.xml
??????????????? Comet4J容器侦听
??????????????? org.comet4j.core.CometAppListener
???????
???????
??????????????? Comet连接[默认:org.comet4j.core.CometServlet]
??????????????? CometServlet
??????????????? CometServlet
??????????????? org.comet4j.core.CometServlet
???????
???????
??????????????? CometServlet
??????????????? /conn
???????
? HelloWorld
? org.comet4j.demo.helloworld.HelloWorld
转载自:
http://code.google.com/p/comet4j/wiki/HelloWorld?