comet4j

简介

Comet4J是一个微型的即时推送框架,它分为服务端 与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6、7)放入WEB-INF\lib,客户端(JavaScript文件)引入到 页面,那么你的应用就具备了向客户端推送信息的能力,而你仅需要在服务器端调用Comet4J所提供发送方法,信息就会被主动的推送到客户的浏览器上。

准备工作

下载服务端jar文件

Comet4J目前仅支持Tomcat6、7版本,根据您所使用的Tomcat版本下载【comet4j-tomcat6.jar】或【comet4j-tomcat7.jar】文件放置到WEB项目的WEB-INF\lib目录下。

下载客户端js文件

下载【comet4j.js】到您的项目中,比如:WebContent\js目录下。

修改服务器配置文件

因为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"/>

在web.xml中加载Comet4J框架

最后我们需要在web.xml配置侦听和comet连接地址,以使Comet4J生效:

<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>

这里是最小化配置,更多配置请参见【更多资料】。至此所有的准备工作已经就绪,现在让我们来开发一个HelloWorld吧!

客户端使用简介

客户端是一个JavaScript文件 (comet4j-0.0.2.js),其中最重要的是JS.Connector和JS.Engine两个类。JS.Connector负责与服务器建立 并保持连接,而JS.Engine类负责将服务器推送过来的消息转化为开发人员可以处理的消息事件,并分发出去,关于客户端的API请参见:http://comet4j.axiao.org:8080/comet4j/cdoc/ 。大多数情况下,我们仅需要使用JS.Engine类就可以完成多数的开发工作。

JS.Engine类是一个静态类,在一个页面中只有一个JS.Engine类的实例。它除了负责把服务器推过来的消息转化为事件分发以外,与服务器的连接与断开也由此类负责。

JS.Engine.start方法

JS.Engine.start(String str)和JS.Engine.stop(String str)分别控制连接和断开动作,start方法需要传入一个字符串参数,用来指定您配置的Comet4J连接地址。比如按前面准备工作的配置了 CometServlet的地址为/conn,那么可以这样写:

JS.Engine.start(‘/conn‘);

上段代码我们让浏览器与服务器进行连接,当连接成功以后JS.Engine类会发出"start"事件,如何进行事件的处理我们稍后介绍。

JS.Engine.stop方法

我们也能够让连接断开:

JS.Engine.stop(‘主动断开‘);

上面代码我们让连接断开,并传入了一个“主动断开”这样一个断开的原因。如果您并不需要对断开的原因进行说明,也可以不传递参数:

JS.Engine.stop();

JS.Engine类的事件处理

上面我们介绍了如何使用start和stop方法来建立 和断开连接,当成功建立连接已后JS.Engine会发出"start"事件,当断开后会发出“stop”事件,当收到某个通道推送过来的信息时也会发出 与通道标识同名的事件。您可以事先在中使用JS.Engine.on方法来注册事件处理函数。例如:

(‘连接已建立,连接ID为:‘ + cId);
});
JS.Engine.on(‘stop‘,function(cause, cId, url, engine){
    alert(‘连接已断开,连接ID为:‘ + cId + ‘,断开原因:‘ + cause + ‘,断开的连接地址:‘+ url);
});

也可以将上段代码写成,下面代码与上段代码完全等效:

: function(cId, channelList, engine){
      alert(‘连接已建立,连接ID为:‘ + cId);
    },
    stop : function(cause, cId, url, engine){
      alert(‘连接已断开,连接ID为:‘ + cId + ‘,断开原因:‘ + cause + ‘,断开的连接地址:‘+ url);
    }
});

接下来,介绍一下如何对服务器推送过来的消息进行处理。在介绍之前,我们假设后台已经注册了一个"hello"的应用通道标识,并且只向客户端推送简单的字符串信息。先看如下代码:

(text);
});

这样当服务器端使用"hello"通道标识推送过来的消息就可以由上段代码进行处理,将推送过来的信息弹出。

特别注意:以上代码在事件处理函数中使用了alert仅为说明函数功能,实际使用中,在事件处理函数中切勿使用alert、prompt、confirm等可以中断脚本运行的函数,因为Engine需要实时的保持工作状态。

服务器端使用简介

服务端由一个Jar包组成,其中最重的是CometContext和CometEngine两个类。

Comet Context 类

CometContext是一个单态类,通过其 getInstance方法来获得实例,它主要负责框架的一些初始化工作保存着一些参数的配置值,除此之外它还有一个更重要的职责——负责注册应用通道标 识。如果您想使用框架来实现自己的应用,那么您必需要为自己的应用分配一个唯一的通道标识,并将此通道标识在WEB容器启动时使用 CometContext的registChannel方法进行注册,这样,客户端才可以正确接受此应用所推送的消息。注册一个通道标识非常简单:

CometContext.getInstance().registChannel("hello");

这样便注册了一个标识为“hello”的应用通道,而客户也可以通过JS.Engine.on(‘hello‘,function(msg){...})的形式来接收并处理来自此通道的消息。

Comet Engine 类

另一个重要的类是CometEngine,它除了负责对连接的处理之外,对于开发人员而言,更加常用的可能是它所提供的sendTo或sendToAll方法来向客户端发送消息:

String someConnectionId = "1125-6634-888";
engine.sendToAll(channel , "我来了!");
engine.sendTo(channel , engine.getConnection(someConnectionId),“Hi,我是XXX”);

上面代码使用sendToAll方法向所有客户端 在"hello"通道上发送了“我来了!”这样一条消息,然后又使用sendTo在同样的通道上向某一个连接发送了“Hi,我是XXX”消息。 CometEngine另外一个很重要的地方在于,它是框架工作的事件引擎的集散地,它提供了BeforeConnectEvent、 BeforeDropEvent、ConnectEvent、DropEvent、MessageEvent等事件。通过对这些事件的处理来实现具体的功 能:

@Override
        public boolean handleEvent(ConnectEvent anEvent) {
                CometConnection conn = anEvent.getConn();
                CometContext.getInstance().getEngine().sendTo("hello", conn.getId(),"欢迎上线");
        }
}

CometEngine engine = CometContext.getInstance().getEngine();
engine.addConnectListener(new JoinListener());

上面先定义了一个JoinListener并实现了父类 ConnectListener的handleEvent抽像方法,然后使用engine.addConnectListener来注册这个事件侦听。这 样,在有客户与服务器成功建立连接已后,就可以向此客户端推送一条欢迎信息。

时间: 2024-12-18 09:20:25

comet4j的相关文章

comet4j开发指南

原文链接:http://blog.csdn.net/majian_1987/article/details/8489738 准备工作 下载服务端jar文件 Comet4J目前仅支持Tomcat6.7版本,根据您所使用的Tomcat版本下载[comet4jtomcat6.jar]或[comet4j-tomcat7.jar]文件放置到WEB项目的WEB-INF\lib目录下. 下载客户端js文件 下载[comet4j.js]到您的项目中,比如:WebContent\js目录下. 修改服务器配置文件

java 使用 comet4j 主动向客户端推送信息 简单例子

[背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我惊呆了,因为完全没听过,赶紧上网搜集资料,耗了一个晚上写了个简单的例子,实现主动向客户端发送信息.说是说主动,其实还是要客户端先献出它的“第一次”,即只要它有先请求你一下,以后你们熟了,你想主动约它就约它! 关于comet技术介绍及其实现原理,可以参考网站 http://www.ibm.com/de

Comet4J推技术在SSHE三大框架中应用-linux下亲测可用

Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询.长连接.自动选择三种工作模式. 下载地址 comet4j.zip 我上传上原始的开发别的人开发包 在这里 功能特性 推送消息广播. 推送定向消息. 提供连接上线前.上线.下线前.下线.发送消息等多种可处理事件. 消息缓存机制,确保长轮询工作模式下不丢失消息. 客户端正常下线,服务端可立即感知. 客户端异常停止工作,服务端可定时检查并感知. 以注

WEB消息推送-comet4j

一.comet简介: comet :基于 HTTP长连接的"服务器推"技术,是一种新的 Web 应用架构.基于这种架构开发的应用中,服务器端会主动以异步的方式向客户端程序推送数据,而不需要客户端显式的发出请求.Comet 架构非常适合事件驱动的 Web 应用,以及对交互性和实时性要求很强的应用,如股票交易行情分析.聊天室和 Web 版在线游戏等. 二.comet4j功能特性 推送消息广播. 推送定向消息. 提供连接上线前.上线.下线前.下线.发送消息等多种可处理事件. 消息缓存机制,确

DWR、Comet4j在Nginx+Tomcat组合下的优化

DWR.Comet4j这类推送框架在Tomcat下运行正常,但在nginx+tomcat组合下,可能会出现断连.延迟等各种问题. 如出现此类问题,可尝试以下优化方式: 1.Nginx-----nginx.conf worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; #keepali

161014、Comet4J介绍及使用(即时推送)

简介 Comet4J是一个微型的即时推送框架(类似于goeasy),它分为服务端与客户端两部分,你只要将服务器端(JAR文件,目前仅支持Tomcat6.7)放入WEB-INF\lib,客户端(JavaScript文件)引入到页面,那么你的应用就具备了向客户端推送信息的能力,而你仅需要在服务器端调用Comet4J所提供发送方法,信息就会被主动的推送到客户的浏览器上. 准备工作 下载服务端jar文件 Comet4J目前仅支持Tomcat6.7版本,根据您所使用的Tomcat版本下载[comet4j-

Comet4J AJAX 服务器推送框架

Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询.长连接.自动选择三种工作模式. 功能特性 推送消息广播. 推送定向消息. 提供连接上线前.上线.下线前.下线.发送消息等多种可处理事件. 消息缓存机制,确保长轮询工作模式下不丢失消息. 客户端正常下线,服务端可立即感知. 客户端异常停止工作,服务端可定时检查并感知. 以注册通道应用的方式,让开发者对框架功能进行扩展,实现自己的应用. 框架特性

开源服务器软件

Java缓存服务器 jmemcached http://www.oschina.net/p/jmemcached jmemcached 是一个Java版的 memcached 缓存服务器,基本上跟 memcached 是兼容的.jmemcached 是使用 Apache MINA 作为无堵塞的网络IO操作,但之后使用Netty作为网络异步实现机制. Web服务器 TornadoTornado web server 是使用Python编写出來的一个极轻量级.高可伸缩性和非阻塞IO的Web服务器软件

openfire spark 二次 开发 服务插件

====================  废话 begin   ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即时通讯. 最初狂搜集资料.不能让自己方向错了.这是很重要的. 不过还是难免的周折了一番.测试了一个comet4j的聊天小例子.用它前后端开发成本太大.对服务器也太大压力放弃了. 最终决定使用openfire +jsjac.js + JabberHTTPBind 然后实现老大要求的 web 及时通讯功