javaweb实现后台向前台的消息推送 comet4j

 

1.新建项目,像项目中添加jar包,或者在maven的pom.xml中添加依赖,添加comet4j-tomcat7.jar包

如果不是maven项目,可以将comet4j-tomcat7.jar包放在lib下,如图:

如果是maven项目,在pom.xml文件中添加依赖,如图:

 

2.修改tomcat中server.xml配置,protocol="org.apache.coyote.http11.Http11NioProtocol",如下图:

3.编写后台代码,后台java代码如下

package org.comet4j.demo;

import java.util.Random;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.comet4j.core.CometContext;
import org.comet4j.core.CometEngine;

public class CometListener implements ServletContextListener{
	private static final String CHANNEL = "test";

    public void contextInitialized(ServletContextEvent arg0) {
        CometContext cc = CometContext.getInstance();
        cc.registChannel(CHANNEL);// 注册应用的channel

        //在这里可以直接启动线程进行调用,也可以在方法中进行调用
        Thread helloAppModule = new Thread(new HelloAppModule(),"Sender App Module");
        // 是否启动
        helloAppModule.setDaemon(true);
        // 启动线程
        helloAppModule.start();
    }

    class HelloAppModule implements Runnable {
        public void run() {
            while (true) {
                try {
                    // 睡眠时间
                    Thread.sleep(2000);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                CometEngine engine = CometContext.getInstance().getEngine();
                // 开始发送         
                engine.sendToAll(CHANNEL, getMessage());
            }
        }
    }
    
    public String getMessage(){
    	String[]names = new String[]{"冯春雷","吴兆元","夏胜安","李瑞东","田东东","张文良","刘权","邵帅","肖小良","任银","王继伟"};
    	int number = new Random().nextInt(10) + 1;
    	return names[number];
    }

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		
	}
}

4.配置web.xml,添加监听

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<listener>
		<listener-class>org.comet4j.core.CometAppListener</listener-class>
	</listener>
	<servlet>
		<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>
		<listener-class>org.comet4j.demo.CometListener</listener-class>
	</listener>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>
</web-app>

5.编写前台测试页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="js/comet4j.js"></script>
<script type="text/javascript">
	function init() {
		var kbDom = document.getElementById('kb');
		JS.Engine.on({
			test : function(result) {//侦听一个channel  
				kbDom.innerHTML = result;
				console.log(result);
			}
		});
		JS.Engine.start('conn');
		JS.Engine.on('test', function(cId, channelList, engine) {
			console.dir('连接已建立,连接ID为:' + cId);
			console.log('channelList'+channelList);
			console.log('engine'+engine);
		});

	}
	
</script>
</head>
<body onload="init();">
	你好:<span id="kb" style="color: red">...</span>
	<br />
</body>
</html>

其中comet4j.js为第三方插件,tomcat用7的版本,具体的源码见链接:

https://download.csdn.net/download/jinxiumeihappy/12113892

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值