comet4j java服务端推送消息到web页面实例
2014-07-17 09:29
513 查看
对于页面一直监控,以前都是使用ajax请求即可,但是小并发这做法没多大问题,但是到了大并发就不太合适,如果不想自己写线程来操控就可以偷懒找一些插件,例如comet4j
下面我来演示下如何使用这个插件
先准备需要的工具:
comet4j-tomcat6.jar(tomcat6的就导入这个)
comet4j-tomcat7.jar(tomcat7的就导入这个)
comet4j.js(页面引入这个js)
具体操作看下面
然后就写个class
[java] view
plaincopy
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;
}
}
然后再写个页面
[html] view
plaincopy
<!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了
[html] view
plaincopy
<!-- 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开发的插件
[html] view
plaincopy
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
测试,很简单就是访问我们刚刚创建的test.html,然后就可以看到内存数值一直自动刷新波动
转载于:/article/2499705.html
下面我来演示下如何使用这个插件
先准备需要的工具:
comet4j-tomcat6.jar(tomcat6的就导入这个)
comet4j-tomcat7.jar(tomcat7的就导入这个)
comet4j.js(页面引入这个js)
具体操作看下面
然后就写个class
[java] view
plaincopy
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;
}
}
然后再写个页面
[html] view
plaincopy
<!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了
[html] view
plaincopy
<!-- 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开发的插件
[html] view
plaincopy
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
测试,很简单就是访问我们刚刚创建的test.html,然后就可以看到内存数值一直自动刷新波动
转载于:/article/2499705.html
相关文章推荐
- comet4j Java 服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- comet4j java服务端推送消息到web页面实例
- JavaWEB应用的消息推送功能:comet4j
- comet4j实现web消息推送
- (1)comet4j web 消息推送
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。
- java web 服务器推送技术--comet4j
- comet4j-java服务器推送实例
- (2)comet4j web 消息推送
- Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递
- Java 消息推送------GoEasy实现服务端推送和web端推送
- java web 服务器推送技术--comet4j
- spring boot 整合activemq 进行服务端消息推送(web页面)
- 服务器主动向客户端推送消息-java之comet4j实现
- Java后台主动推送消息至Web页面(探讨、研究、琢磨)
- JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息