读书人

Comt4j讯息推送实例

发布时间: 2013-11-03 15:39:14 作者: rapoo

Comt4j消息推送实例
1.1 Comt4j1.1.1 介绍

Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询、长连接、自动选择三种工作模式。

功能特性

推送消息广播。

推送定向消息。

提供连接上线前、上线、下线前、下线、发送消息等多种可处理事件。

消息缓存机制,确保长轮询工作模式下不丢失消息。

客户端正常下线,服务端可立即感知。

客户端异常停止工作,服务端可定时检查并感知。

以注册通道应用的方式,让开发者对框架功能进行扩展,实现自己的应用。

框架特性

独立小巧,不依赖于第三方包。

与应用紧密集成,无需独立应用或服务器。

与Session无关的连接机制,为开发人员提供最大程度的功能可控性。

面向事件编程,客户端与服务器端均为事件驱动开发模式,提供了良好的可扩展性机制。

各项性能参数均可配置。

支持多种主流浏览器,并支持Air应用环境。

服务器支持情况

Tomcat6、Tomcat7

浏览器支持情况

支持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流方式实现服务端信息的推送。

读书人网 >软件架构设计

热点推荐