comet4j java服务端推送消息到web页面实例
来源:互联网 发布:约瑟夫环c语言链表 编辑:程序博客网 时间:2024/05/17 04:43
原文在这里:http://blog.csdn.net/shadowsick/article/details/9014139
对于页面一直监控,以前都是使用ajax请求即可,但是小并发这做法没多大问题,但是到了大并发就不太合适,如果不想自己写线程来操控就可以偷懒找一些插件,例如comet4j
下面我来演示下如何使用这个插件
先准备需要的工具:
comet4j-tomcat6.jar(tomcat6的就导入这个)
comet4j-tomcat7.jar(tomcat7的就导入这个)
comet4j.js(页面引入这个js)
具体操作看下面
然后就写个class
- package com.shadow.extras.comet4j;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import org.comet4j.core.CometContext;
- import org.comet4j.core.CometEngine;
- public class TestComet implements ServletContextListener {
- private static final String CHANNEL = "test";
- private static final String CHANNEL2 = "test2";
- public void contextInitialized(ServletContextEvent arg0) {
- CometContext cc = CometContext.getInstance();
- cc.registChannel(CHANNEL);// 注册应用的channel
- cc.registChannel(CHANNEL2);
- Thread helloAppModule = new Thread(new HelloAppModule(),
- "Sender App Module");
- // 是否启动
- helloAppModule.setDaemon(true);
- // 启动线程
- helloAppModule.start();
- Thread helloAppModule2 = new Thread(new HelloAppModule2(),
- "Sender App Module");
- // 是否启动
- helloAppModule2.setDaemon(true);
- // 启动线程
- helloAppModule2.start();
- }
- class HelloAppModule2 implements Runnable {
- public void run() {
- while (true) {
- try {
- // 睡眠时间
- Thread.sleep(5000);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- CometEngine engine = CometContext.getInstance().getEngine();
- // 获取消息内容
- long l = getFreeMemory();
- // 开始发送
- engine.sendToAll(CHANNEL2, l);
- }
- }
- }
- class HelloAppModule implements Runnable {
- public void run() {
- while (true) {
- try {
- // 睡眠时间
- Thread.sleep(2000);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- CometEngine engine = CometContext.getInstance().getEngine();
- // 获取消息内容
- long l = getFreeMemory();
- // 开始发送
- engine.sendToAll(CHANNEL, l);
- }
- }
- }
- public void contextDestroyed(ServletContextEvent arg0) {
- }
- public long getFreeMemory() {
- return Runtime.getRuntime().freeMemory() / 1024;
- }
- }
然后再写个页面
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>Comet4J Hello World</title>
- <script type="text/javascript" src="plugin/comet4j/comet4j.js"></script>
- <script type="text/javascript">
- function init(){
- var kbDom = document.getElementById('kb');
- var kbDom2 = document.getElementById('kb2');
- JS.Engine.on({
- test : function(aa){//侦听一个channel
- kbDom.innerHTML = aa;
- },
- test2 : function(bb){
- kbDom2.innerHTML = bb;
- }
- });
- JS.Engine.start('comet');
- }
- </script>
- </head>
- <body onload="init()">
- 剩余内存:<span id="kb">...</span>KB <br/>
- 剩余内存:<span id="kb2">...</span>KB
- </body>
- </html>
接着配置下web.xml就ok了
- <!-- 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>/comet</url-pattern>
- </servlet-mapping>
- <listener>
- <description>TestComet</description>
- <listener-class>com.shadow.extras.comet4j.TestComet</listener-class>
- </listener>
最后修改下tomcat的server.xml文件
把protocol参数值改成下面的,因为这是基于nio开发的插件
- <Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
测试,很简单就是访问我们刚刚创建的test.html,然后就可以看到内存数值一直自动刷新波动
ps:
(1)与springmvc集成的时候,要注意comet的listener要写在spring的listener之后,这样才能在comet的listener中获取到spring的context。
参考: http://energykey.iteye.com/blog/326303
(2)mvn打包的时候,如何依赖本地包:
maven打包的时候有些jar包是不在mavencenter的。需要在pom中引入相关的本地jar包,那么相关的depency应该像如下更改 <dependency> <groupId>org.wltea.ik-analyzer</groupId> <artifactId>ik-analyzer</artifactId> <version>3.2.8</version> <scope>system</scope> <systemPath>${project.basedir}/lib/ik-analyzer-3.2.8.jar</systemPath> </dependency>对于war包系统来说,有时候需要把jar包打到相关的war包中,可以使用plugin,默认将lib下的所有jar文件打包到WEB-INF/lib下。当然也是可以打包其他的文件的,诸如xml,properties等的。相关的plugin如下: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <warName>${project.artifactId}</warName> <webResources> <resource> <directory>lib/</directory> <targetPath>WEB-INF/lib</targetPath> <includes> <include>**/*.jar</include> </includes> </resource> </webResources> </configuration> </plugin>参考:http://my.oschina.net/zimingforever/blog/266191
comet4j用起来还是挺简单的!
0 0
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- 服务端消息推送技术 comet4j开发指南
- comet4j-java服务器推送实例
- java web 服务器推送技术--comet4j
- java web 服务器推送技术--comet4j
- Comet4J 消息推送
- 消息推送框架 Comet4J
- 消息推送框架 Comet4J
- comet4j 消息推送配置
- Asp.net SignalR 实现服务端消息推送到Web端
- 服务器主动向客户端推送消息-java之comet4j实现
- 利用Comet4J 及时推送消息
- 调试lua代码
- Xcode7友盟分享
- 聊一聊php程序的sql注入攻击与字符转义问题
- android去掉标题栏
- 每天一个linux命令(1):ls命令
- comet4j java服务端推送消息到web页面实例
- 轻松学习Ionic
- Java 多态详解
- js正则表达式验证各类需求(整数,实数,小数,时间,URL等)
- 带有数字的进度条
- 程序导入友盟微社区后报错android.view.InflateException:com.umeng.comm.ui.imagepicker.widgets.RoundImageView
- final域的内存语义
- 中国菜刀Cknife(C刀)自定义模式秒过安全狗. php过狗一句话,asp过狗一句话.
- hot spot 热点 setHotSpot()