Comet4j基于AJAX的服务器推送框架
http://www.zftb.cn  发布时间:2016-11-07 10:33 来源:未知 浏览:加载中
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>  
 
 
如果你有好的win10资讯或者win10教程,以及win10相关的问题想要获得win10系统下载的关注与报道。
欢迎加入发送邮件到657025171#qq.com(#替换为@)。期待你的好消息!