Comet框架:Comet4J
来源:互联网 发布:南开大学 mba 知乎 编辑:程序博客网 时间:2024/06/14 17:51
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。
下面网址可以下载:
http://code.google.com/p/comet4j/
https://github.com/jinghai/comet4j
准备工作
1、下载服务端jar文件
Comet4J目前仅支持Tomcat6、7版本,根据您所使用的Tomcat版本下载 comet4j-tomcat6.jar 或 comet4j-tomcat7.jar 。
2、下载客户端js文件
下载 comet4j.js 到您的项目中。
3、修改服务器配置文件
因为Comet4J工作在NIO方式下,所以我们需要调整服务器连接器配置,更换为NOI连接器。
<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"/>
*注意:NIO方式与BIO(Socket)的方式的最大区别就是NIO是一请求一线程,而BIO是一连接一线程,后者就导致如果服务器未来得及响应客户端就要一直等一直等,该连接就一直占用着这个线程。如果是NIO的话则可以复用连接,也就是无须等待服务器端的响应就可以继续给服务器端发送消息,发送和接收是异步响应的。
在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>这里是最小化配置。
示例
我们利用Comet4J开发一个每隔一秒向所有客户端推送服务器的剩余内存大小。
客户端 helloworld.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"><head><metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/><title>Comet4J Hello World</title><scripttype="text/javascript"src="js/comet4j-0.0.2.js"></script><scripttype="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 =newThread(newHelloAppModule(),"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://xsxjb.iteye.com/blog/2026326
0 1
- Comet框架:Comet4J
- Comet HTTP服务器推送框架之Comet4J
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递
- 消息推送框架 Comet4J
- 消息推送框架 Comet4J
- 服务器推送框架:Comet4J
- weblogic comet4j java.lang.ClassNotFoundException: org.apache.catalina.comet.CometProcessor
- comet4j
- comet4j
- comet4j
- comet4j
- comet4j
- comet4j
- comet4j
- Comet4j
- comet4j
- comet4j
- comet技术框架确定
- 代码编辑器:vim操作
- Ubuntu命令(已用到的)
- 恒星论坛
- gradle安装
- Android网络传输中必用的两个加密算法:MD5 和 RSA 及Base64加密总结
- Comet框架:Comet4J
- silverlight中调用wcf服务
- 类似QQ对话框上下部分可拖动代码
- java 音频视频转码
- ibatis+Spring 整合
- Android学习十九:ContentProvider初步
- codeforces #296 div2 (527C) STL中set的运用
- Quantitative Risk Analysis Scenarios, Modeling, and Simulations for the PMP Certification Exam
- 在android String resource中使用 时的遇到的困惑