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

简介:       对于页面一直监控,以前都是使用ajax请求即可,但是小并发这做法没多大问题,但是到了大并发就不太合适,如果不想自己写线程来操控就可以偷懒找一些插件,例如comet4j 下面我来演示下如何使用这个插件       先准备需要的工具: comet4j-tomcat6.

      对于页面一直监控,以前都是使用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,然后就可以看到内存数值一直自动刷新波动


目录
相关文章
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
67 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
2月前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
64 6
|
2月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
87 4
|
3月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
3月前
|
JSON Java 开发工具
Java服务端集成Google FCM推送的注意事项和实际经验
本文分享了作者在公司APP海外发布过程中,选择Google FCM进行消息推送的集成经验。文章详细解析了Java集成FCM推送的多种实现方式,包括HTTP请求和SDK集成,并指出了通知栏消息和透传消息的区别与应用场景。同时,作者还探讨了Firebase项目的创建、配置和服务端集成的注意事项,帮助读者解决文档混乱和选择困难的问题。
138 1
|
2月前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
74 0
|
3月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
55 1
WK
|
2月前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
123 0
|
3月前
|
Java
java的Random类和Arrays.sort类使用实例
java的Random类和Arrays.sort类使用实例
15 0
|
Web App开发 JavaScript 前端开发
Web页面上工作流设计器(silverlight/Flex/Javascript/java Workflow Designer)
最近需要做一个web页面的工作流设计器,调研了一下,具体内容汇总如下,可做大家的使用选型参考。 Silverlight的Workflow Designer ShareDesigner http://sharedesigner.
2046 0
下一篇
开通oss服务