comet4j java服务端推送消息到web页面实例

 对于页面一直监控,以前都是使用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;
	}
}

 

然后再写个页面





Comet4J Hello World




        剩余内存:...KB 
剩余内存:...KB

 接着配置下web.xml就ok了


	
		Comet4J容器侦听
		org.comet4j.core.CometAppListener
	
	
		Comet连接[默认:org.comet4j.core.CometServlet]
		CometServlet
		CometServlet
		org.comet4j.core.CometServlet
	
	
		CometServlet
		/comet
	

	
		TestComet
		com.shadow.extras.comet4j.TestComet
	

 最后修改下tomcat的server.xml文件

 

把protocol参数值改成下面的,因为这是基于nio开发的插件

 测试,很简单就是访问我们刚刚创建的test.html,然后就可以看到内存数值一直自动刷新波动

你可能感兴趣的:(java,xhtml,javascript,runtime)