1. 资源
comet4j-tomcat7.jar
comet4j.js
2. 资源添加
普通项目直接加入jar包至lib,addtobuildpath即可
maven项目,需先将jar包加入至本地仓库,然后在pom.xml中引入
js直接引入页面
maven手动安装jar包至本地仓库
mvn install:install-file -Dfile=jar包的位置 -DgroupId=groupId -DartifactId=artifactId -Dversion=version -Dpackaging=jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
对应该配置项的命令即为:
mvn install:install-file -Dfile=D:\mvn\spring-context-support-3.1.0.RELEASE.jar -DgroupId=org.springframework -DartifactId=spring-context-support -Dversion=3.1.0.RELEASE -Dpackaging=jar
3. 配置
3.1 web.xml
<!-- comet4j -->
<listener>
<listener-class>org.comet4j.core.CometAppListener</listener-class>
</listener>
<listener>
<description>comet</description>
<listener-class>com.xxx.xxx.listener.Comet4jListener(自己添加的类)</listener-class>
</listener>
<servlet>
<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>
3.2 监听类(web.xml中配置的Listener)
容器启动时注册Channel
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.comet4j.core.CometContext;
import com.wttech.szyy.utils.StringUtil;
public class Comet4jListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
//CometContext : Comet4J上下文,负责初始化配置、引擎对象、连接器对象、消息缓存等。
CometContext cc = CometContext.getInstance();
//注册频道
cc.registChannel("频道号");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
}
}
3.3 页面配置
引入comet4j.js
// 建立连接,conn 即web.xml中 CometServlet的<url-pattern>
JS.Engine.start('conn');
JS.Engine.on({
start : function(cId, channelList, engine){
console.log('连接已建立,连接ID为:' + cId);
},
stop : function(cause, cId, url, engine){
console.log('连接已断开,连接ID为:' + cId + ',断开原因:' + cause + ',断开的连接地址:'+ url);
},
"listener中注册的频道号" : function(msg) {
alert("推送消息:" + msg);
}
});
3.4 消息推送
CometEngine engine = CometContext.getInstance().getEngine();
方式一:engine.sendToAll("频道号", "数据");
发送给所有连接到该频道的用户(群发)
方式二:engine.sendTo("频道号", engine.getConnection("页面连接成功后的cId"), "数据");
发送给某一个用户(定点发送)
4.集成到业务系统进行推送的想法
![流程图](https://img-blog.csdn.net/20170824165743099?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2FuZ3poZTE5OTE5MTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)