Comet與SpringMVC的集成-java后端消息推送

使用Comet為了實(shí)現(xiàn)java后臺(tái)給前臺(tái)頁(yè)面推送消息通知

準(zhǔn)備

web項(xiàng)目中引入comet4j.js文件和comet4j-tomcat7.jar包

web.xml

修改web.xml,添加以下comet配置

<listener>
        <listener-class>org.comet4j.core.CometAppListener</listener-class>
    </listener>
    <listener>
        <description>HelloWorld</description>
        <listener-class>com.aerors.listener.TestComet</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>

com.aerors.listener.TestComet改為實(shí)際java類位置

com.aerors.listener.TestComet

package com.aerors.listener;

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 int number1 = 0 ;

    public void contextInitialized(ServletContextEvent arg0) {
        CometContext cc = CometContext.getInstance();
        cc.registChannel(CHANNEL);// 注冊(cè)應(yīng)用的channel

        Thread helloAppModule = new Thread(new HelloAppModule(),
                "Sender App Module");
        // 是否啟動(dòng)
        helloAppModule.setDaemon(true);
        // 啟動(dòng)線程
        helloAppModule.start();
    }

    class HelloAppModule implements Runnable {
        public void run() {
            while (true) {
                try {
                    // 睡眠時(shí)間
                    Thread.sleep(2000);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
                CometEngine engine = CometContext.getInstance().getEngine();
                // 獲取消息內(nèi)容
                long l = getFreeMemory();
                // 開始發(fā)送         
                engine.sendToAll(CHANNEL, number1++);
            }
        }
    }
}

前臺(tái)頁(yè)面JSP頁(yè)面

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

<!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="js/libs/jquery/jquery.min.js"></script> 
<script type="text/javascript" src="js/libs/comet4j/comet4j.js"></script>
<script type="text/javascript">  
function init(){  
        var kbDom = document.getElementById('kb');   
        JS.Engine.on({  
                test : function(aa){//偵聽一個(gè)channel  
                        kbDom.innerHTML = aa; 
                        console.log(aa);
                }  
        }); 
        JS.Engine.start('conn'); 
        JS.Engine.on(
            'test',function(cId,channelList,engine){
                  console.dir('連接已建立,連接ID為:' + cId);
            });
         
}  
function test(){
    var kbDom = document.getElementById('kb');  
 
    JS.Engine.start('conn'); 
    JS.Engine.on({  
            test : function(aa){//偵聽一個(gè)channel  
                    kbDom.innerHTML = aa; 
                    console.log(aa);
            } 
    }); 
}
</script>  
</head>  
<body onload="init();">  
    <span id="kb">...</span> <br/>  
    <button onclick="test();">click</button>
</body>  
</html>  

兩種方式加載都可以

注意:前臺(tái)為動(dòng)態(tài)JSP頁(yè)面,不能是靜態(tài)html頁(yè)面

image.png

可以看出請(qǐng)求一直保持,頁(yè)面上數(shù)字也一直在刷新


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近看一部電視劇《虎嘯龍吟》從另一個(gè)角度講述三國(guó)的故事,讓自已可以真真正正從另一角度去看待問(wèn)題,思考問(wèn)題,在...
    曹的閑話閱讀 871評(píng)論 0 1
  • 親愛(ài)的朱先生,眨眼之間你也到了本命之年,你我相識(shí)已近八年,在此送上我對(duì)你真摯的生日祝福:愿你身體安康,幸??鞓?lè),事...
    谷是山谷的山閱讀 574評(píng)論 0 0

友情鏈接更多精彩內(nèi)容