Comt4j消息推送實例

1.1 Comt4j

1.1.1 介紹

Comet4J(Comet for Java)是一個純粹基於AJAX(XMLHTTPRequest)的服務器推送框架,消息以JSON方式傳遞,具備長輪詢、長連接、自動選擇三種工作模式。 

功能特性

· 推送消息廣播。

· 推送定向消息。

· 提供連接上線前、上線、下線前、下線、發送消息等多種可處理事件。

· 消息緩存機制,確保長輪詢工作模式下不丟失消息。

· 客戶端正常下線,服務端可立即感知。

· 客戶端異常停止工作,服務端可定時檢查並感知。

· 以註冊通道應用的方式,讓開發者對框架功能進行擴展,實現自己的應用。

框架特性

· 獨立小巧,不依賴於第三方包。

· 與應用緊密集成,無需獨立應用或服務器。

· Session無關的連接機制,爲開發人員提供最大程度的功能可控性。

· 面向事件編程,客戶端與服務器端均爲事件驅動開發模式,提供了良好的可擴展性機制。

· 各項性能參數均可配置。

· 支持多種主流瀏覽器,並支持Air應用環境。

服務器支持情況

Tomcat6Tomcat7

瀏覽器支持情況

支持XMLHTTPRequest對象的瀏覽器均可支持長輪詢工作模式,但不一定能夠支持長連接。

瀏覽器/平臺

版本

長輪詢

長連接

Internet Explorer

6,7,8,9

X

FireFox

3.0+(更底版本未知)

Chrome

7.0+(更底版本未知)

Safari

5+(更底版本未知)

Opera

11.10+(更底版本未知)

X

Air

1.5+(更底版本未知)

IOS(Iphone/Ipad)

3.1+(更底版本未知)

Android

未測試

未知

未知

BlackBerry

未測試

未知

未知

     

對比參考: Pushlet實例解析Servlet3.0 服務端推技術

 

1.1.2 服務端

package org.comet4j.demo.helloworld;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import org.comet4j.core.CometContext;

import org.comet4j.core.CometEngine;

public class HelloWorld implements ServletContextListener {

        private static final String CHANNEL = "hello";

        

        public void contextInitialized(ServletContextEvent arg0) {

            CometContext cc = CometContext.getInstance();

            cc.registChannel(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(1000);

                    } catch (Exception ex) {

                        ex.printStackTrace();

                    }

                    

                    CometEngine engine = CometContext.getInstance().getEngine();

                    // 推送當前服務器的剩餘內存大小

                    engine.sendToAll(CHANNEL, Runtime.getRuntime().freeMemory()/1024);

                }

            }

        }

        public void contextDestroyed(ServletContextEvent arg0) {

        }

}

1.1.3 客戶端

<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/comet4j.js"></script>

<script type="text/javascript">

function init(){

        var kbDom = document.getElementById('kb');

        JS.Engine.on({

                hello : function(kb){//偵聽一個channel

                        kbDom.innerHTML = kb;

                }

        });

        JS.Engine.start('conn');

        JS.Engine.on(

        'start',function(cId,channelList,engine){

          alert('連接已建立,連接ID爲:' + cId);

        });

}

</script>

</head>

<body onload="init()">

        剩餘內存:<span id="kb">...</span>KB

</body>

</html>

1.1.4 運行效果

在瀏覽器輸入:http://IP:8080/Comet4j/helloworld.html運行效果如下。

從下面的網絡請求可以看出,comet4j 通過comet流方式實現服務端信息的推送。

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