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 | 未测试 | 未知 | 未知 |
准备工作
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文件将找到原先的连接器配置:
<Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
替换为:
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
客户端
我们利用Comet4J开发一个每隔一秒向所有客户端推送服务器的剩余内存大小。 helloworld.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Comet4J Hello World</title>
<script type="text/javascript" src="js/comet4j-0.0.2.js"></script>
<script type="text/javascript">
function init(){
var kbDom = document.getElementById('kb');
JS.Engine.on({
hello : function(kb){//侦听一个channel
kbDom.innerHTML = kb;
}
});
JS.Engine.start('conn');
}
</script>
</head>
<body onload="init()">
剩余内存:<span id="kb">...</span>KB
</body>
</html>
服务端
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
<listener>
<description>Comet4J容器侦听</description>
<listener-class>org.comet4j.core.CometAppListener</listener-class>
</listener>
<servlet>
<description>Comet连接[默认:org.comet4j.core.CometServlet]</description>
<display-name>CometServlet</display-name>
<servlet-name>CometServlet</servlet-name>
<servlet-class>org.comet4j.core.CometServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CometServlet</servlet-name>
<url-pattern>/conn</url-pattern>
</servlet-mapping>
<listener>
<description>HelloWorld</description>
<listener-class>org.comet4j.demo.helloworld.HelloWorld</listener-class>
</listener>
转载自:
相关推荐
其次,`comet4j-tomcat6.jar`和`comet4j-tomcat7.jar`是专门为Tomcat应用服务器编写的Comet4j插件。Tomcat是Apache软件基金会开发的一款广泛使用的开源Servlet容器。这两个JAR文件包含了Comet4j与Tomcat集成所需的...
一个简单的Comet4j应用通常包含以下几个步骤: - 创建Comet服务:在服务器端,你需要创建一个Comet服务实例,设置监听端口和处理逻辑。 - 注册事件处理器:定义事件处理器类,处理来自服务器的数据推送事件。 - ...
本项目"基于Comet4j的简易聊天"旨在通过Comet4j框架创建一个简单的聊天应用,让用户可以实现实时的消息传递。 在描述中,我们看到"基于Comet4j的简易聊天",这表明项目的核心是利用Comet4j的长轮询或HTTP流特性来...
通过这种方式,Comet4j为开发者提供了一种简单且高效的方法,来构建具有实时通信功能的Java Web应用,无需依赖其他复杂的框架或技术,如WebSocket。然而,随着技术的发展,现代Web应用更多地转向使用WebSocket,因为...
样例文件通常包含了一个简单的示例应用,演示了如何在实际项目中使用Comet4J。这可能包括Java后端代码、HTML页面、JavaScript代码以及相关的配置文件。通过分析这个样例,开发者可以快速理解Comet4J的工作原理,并将...
总的来说,这个"comet4j简单工程demo"是一个很好的起点,可以帮助开发者快速理解Comet4j的工作原理和使用方法。通过分析和运行这个示例,你可以深入学习如何在实际项目中利用Comet4j实现高效的实时通信功能。
6. **易于使用**:Comet4J提供了简单易用的API,让开发者能够快速上手,减少了学习成本。 7. **安全机制**:Comet4J内置了一些安全特性,如连接超时、重试机制以及用户身份验证,确保数据的安全传输。 在实际开发...
通过这个Demo,你可以亲自动手实践,搭建一个简单的实时通信应用,从而深入理解Comet4j的工作原理和优势。这将对提升你在实时Web应用开发领域的技能有很大帮助。在实践中,你还可以尝试优化性能,如调整连接超时、...
Comet4j框架正是基于这种技术,为Java开发者提供了一套简单易用的API,以处理服务器与客户端之间的双向通信。它支持多种推送模式,如长轮询、HTTP流和WebSocket等,适应不同的浏览器和服务器环境。 `comet4j.js`是...
- **易用性**:Comet4j提供了简单的API和示例,降低了开发实时Web应用的门槛。 然而,Comet技术也存在一些挑战,比如服务器资源占用较高、长时间占用连接可能导致服务器负载增加等。因此,在实际使用中,需要根据...
5. **测试用例**:Test_comet可能是测试脚本或者一个简单的应用程序,用于验证Comet4j服务器推送功能是否正常工作。你可以通过运行这个测试用例,观察服务器和客户端之间的通信,以确保配置正确。 在学习和使用这个...
- **示例应用**:展示如何使用Comet4J的简单Web应用实例,包括HTML、CSS和JavaScript文件,帮助开发者快速理解和上手。 - **文档**:可能包括用户指南、API文档和示例说明,详细解释了如何配置和使用Comet4J框架。 -...
这个文件很可能是Comet4J的一个示例应用或者演示项目,包含了一些基础的代码示例,展示如何使用Comet4J库来创建一个简单的服务器推送功能。通过分析这个示例,我们可以了解到如何集成Comet4J到自己的项目中,如何...
Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器向客户端推送实时数据的Web应用程序架构。Comet技术打破了传统的HTTP请求-响应模式,允许服务器在客户端保持持久连接,从而实现实时通信,这对于在线...
5. **易用性**:Comet4j提供了一套简单的API,使得开发者能够快速上手,创建实时应用。 在"ChatIsComet4j"这个示例中,我们可以看到如何使用Comet4j实现一个聊天应用。这个应用可能包括以下几个主要部分: 1. **...
5. **易于集成**:Comet4j提供了简单易用的API,开发者可以快速地将其集成到现有的Web应用程序中。 在"Comet4jPrj"这个压缩包中,可能包含以下内容: - **源代码**:展示如何使用Comet4j创建服务器推送的应用程序...
Comet4j是一款专为Java开发者设计的 comet 技术框架,它简化了在Web应用程序中实现长轮询(long-polling)和双向通信的复杂性。Comet技术是解决实时Web应用的一种方法,允许服务器主动向客户端推送数据,而不仅仅是...
在"CometTest"这个文件中,我们可能看到一个简单的Comet4j应用示例。这个例子可能包含了服务器端和客户端的代码,用于演示如何使用Comet4j框架进行数据推送。服务器端的代码可能会创建一个Comet服务,监听特定的URL...
4. **易用性**:Comet4j提供了简单易用的API,使得开发人员能够快速集成和实现服务器推送功能。 在实际应用中,使用Comet4j通常涉及以下步骤: 1. **配置服务器**:根据服务器类型(如Tomcat)选择合适的适配器,...