Comet4j
来源:互联网 发布:有道云mac 隐藏侧边栏 编辑:程序博客网 时间:2024/05/21 22:36
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。
下面网址可以下载:
http://code.google.com/p/comet4j/
准备工作
一.下载服务端jar文件
Comet4J目前仅支持Tomcat6、7版本,根据您所使用的Tomcat版本下载 comet4j-tomcat6.jar 或 comet4j-tomcat7.jar 。
二.下载客户端js文件
下载 comet4j.js 到您的项目中。
三.修改服务器配置文件
因为Comet4J工作在NIO方式下,所以我们需要调整服务器连接器配置,更换为NOI连接器。
打开server.xml文件将找到原先的连接器配置:
Xml代码
- <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
替换为:
Xml代码
- <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生效:
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>
这里是最小化配置。
HelloWorld:
我们利用Comet4J开发一个每隔一秒向所有客户端推送服务器的剩余内存大小。 helloworld.html
Html代码
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <htmlxmlnshtmlxmlns="http://www.w3.org/1999/xhtml">
- <head>
- <metahttp-equivmetahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>
- <title>Comet4J Hello World</title>
- <scripttypescripttype="text/javascript"src="js/comet4j-0.0.2.js"></script>
- <scripttypescripttype="text/javascript">
- function init(){
- var kbDom = document.getElementById('kb');
- JS.Engine.on({
- hello :function(kb){//侦听一个channel
- kbkbDom.innerHTML = kb;
- }
- });
- JS.Engine.start('conn');
- }
- </script>
- </head>
- <body onload="init()">
- 剩余内存:<span id="kb">...</span>KB
- </body>
- </html>
服务端
helloworld.java
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
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>
0 0
- comet4j
- comet4j
- comet4j
- comet4j
- comet4j
- comet4j
- comet4j
- Comet4j
- comet4j
- comet4j
- comet4j即时消息
- comet4j解析
- Comet4J简介
- Comet4J 相关
- comet4j运用
- Comet4j 流程
- comet4j笔记
- comet4j使用Demo
- android常用框架
- PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep
- java发送http的get、post请求 登录返JSON
- thinkphp中URL带参数跳转
- java 使用 comet4j 主动向客户端推送信息 简单例子
- Comet4j
- c字符串题,实现首字母小写转大写
- JAVA泛型
- python小脚本
- Android Studio系列-签名打包
- Nandflash启动,norflash启动,SDRAM总结
- 几种常用的php字符串函数
- InnoDB: space header page consists of zero bytes in tablespace ./mysql/iyikcr32.ibd (table mysql/iyi
- 动态规划之字符编码