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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章