`
longgangbai
  • 浏览: 7307604 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

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>

转载自:

http://code.google.com/p/comet4j/wiki/HelloWorld 

分享到:
评论
2 楼 longgangbai 2013-08-28  
taok88 写道
我想问下,这个性能方面怎么样呢,对于每个不同登录系统的用户,服务推送不同的信息,这个如何控制啊,来学习了。


基于tree型结构定义正如zookeeper的tree型结构一样.肯定没有问题.
1 楼 taok88 2013-07-31  
我想问下,这个性能方面怎么样呢,对于每个不同登录系统的用户,服务推送不同的信息,这个如何控制啊,来学习了。

相关推荐

    comet4j 简单例子+文档

    一个简单的Comet4j应用通常包含以下几个步骤: - 创建Comet服务:在服务器端,你需要创建一个Comet服务实例,设置监听端口和处理逻辑。 - 注册事件处理器:定义事件处理器类,处理来自服务器的数据推送事件。 - ...

    基于comet4j的简易聊天

    本项目"基于Comet4j的简易聊天"旨在通过Comet4j框架创建一个简单的聊天应用,让用户可以实现实时的消息传递。 在描述中,我们看到"基于Comet4j的简易聊天",这表明项目的核心是利用Comet4j的长轮询或HTTP流特性来...

    comet4j-tomcat6.jar和comet4j-tomcat7.jar和comet4j.js

    通过这种方式,Comet4j为开发者提供了一种简单且高效的方法,来构建具有实时通信功能的Java Web应用,无需依赖其他复杂的框架或技术,如WebSocket。然而,随着技术的发展,现代Web应用更多地转向使用WebSocket,因为...

    comet4j 所需js以及comet4j-tomcat6.jar、comet4j-tomcat7.jar包

    其次,`comet4j-tomcat6.jar`和`comet4j-tomcat7.jar`是专门为Tomcat应用服务器编写的Comet4j插件。Tomcat是Apache软件基金会开发的一款广泛使用的开源Servlet容器。这两个JAR文件包含了Comet4j与Tomcat集成所需的...

    comet4j-tomcat6,comet4j-tomcat7,comet4j.js,以及一个样例

    样例文件通常包含了一个简单的示例应用,演示了如何在实际项目中使用Comet4J。这可能包括Java后端代码、HTML页面、JavaScript代码以及相关的配置文件。通过分析这个样例,开发者可以快速理解Comet4J的工作原理,并将...

    comet4j简单工程demo

    总的来说,这个"comet4j简单工程demo"是一个很好的起点,可以帮助开发者快速理解Comet4j的工作原理和使用方法。通过分析和运行这个示例,你可以深入学习如何在实际项目中利用Comet4j实现高效的实时通信功能。

    comet4j开发指南

    6. **易于使用**:Comet4J提供了简单易用的API,让开发者能够快速上手,减少了学习成本。 7. **安全机制**:Comet4J内置了一些安全特性,如连接超时、重试机制以及用户身份验证,确保数据的安全传输。 在实际开发...

    comet4j+tomcat7 demo

    通过这个Demo,你可以亲自动手实践,搭建一个简单的实时通信应用,从而深入理解Comet4j的工作原理和优势。这将对提升你在实时Web应用开发领域的技能有很大帮助。在实践中,你还可以尝试优化性能,如调整连接超时、...

    服务器推送技术之comet4j资源包

    Comet4j框架正是基于这种技术,为Java开发者提供了一套简单易用的API,以处理服务器与客户端之间的双向通信。它支持多种推送模式,如长轮询、HTTP流和WebSocket等,适应不同的浏览器和服务器环境。 `comet4j.js`是...

    comet4j+tomcat6+tomcat7并附完整版Demo

    - **易用性**:Comet4j提供了简单的API和示例,降低了开发实时Web应用的门槛。 然而,Comet技术也存在一些挑战,比如服务器资源占用较高、长时间占用连接可能导致服务器负载增加等。因此,在实际使用中,需要根据...

    comet4j服务器推可运行DEMO

    5. **测试用例**:Test_comet可能是测试脚本或者一个简单的应用程序,用于验证Comet4j服务器推送功能是否正常工作。你可以通过运行这个测试用例,观察服务器和客户端之间的通信,以确保配置正确。 在学习和使用这个...

    Comet4J可运行样例,web页面刷新框架

    - **示例应用**:展示如何使用Comet4J的简单Web应用实例,包括HTML、CSS和JavaScript文件,帮助开发者快速理解和上手。 - **文档**:可能包括用户指南、API文档和示例说明,详细解释了如何配置和使用Comet4J框架。 -...

    comet4j

    这个文件很可能是Comet4J的一个示例应用或者演示项目,包含了一些基础的代码示例,展示如何使用Comet4J库来创建一个简单的服务器推送功能。通过分析这个示例,我们可以了解到如何集成Comet4J到自己的项目中,如何...

    comet4j库文件

    Comet4j是一个Java库,专门用于实现Comet技术,这是一种服务器向客户端推送实时数据的Web应用程序架构。Comet技术打破了传统的HTTP请求-响应模式,允许服务器在客户端保持持久连接,从而实现实时通信,这对于在线...

    Comet4j demo

    5. **易用性**:Comet4j提供了一套简单的API,使得开发者能够快速上手,创建实时应用。 在"ChatIsComet4j"这个示例中,我们可以看到如何使用Comet4j实现一个聊天应用。这个应用可能包括以下几个主要部分: 1. **...

    comet4j可运行demo

    5. **易于集成**:Comet4j提供了简单易用的API,开发者可以快速地将其集成到现有的Web应用程序中。 在"Comet4jPrj"这个压缩包中,可能包含以下内容: - **源代码**:展示如何使用Comet4j创建服务器推送的应用程序...

    Comet4j开发包

    Comet4j是一款专为Java开发者设计的 comet 技术框架,它简化了在Web应用程序中实现长轮询(long-polling)和双向通信的复杂性。Comet技术是解决实时Web应用的一种方法,允许服务器主动向客户端推送数据,而不仅仅是...

    Comet4j推送

    在"CometTest"这个文件中,我们可能看到一个简单的Comet4j应用示例。这个例子可能包含了服务器端和客户端的代码,用于演示如何使用Comet4j框架进行数据推送。服务器端的代码可能会创建一个Comet服务,监听特定的URL...

    comet4j.jar

    4. **易用性**:Comet4j提供了简单易用的API,使得开发人员能够快速集成和实现服务器推送功能。 在实际应用中,使用Comet4j通常涉及以下步骤: 1. **配置服务器**:根据服务器类型(如Tomcat)选择合适的适配器,...

Global site tag (gtag.js) - Google Analytics