xiayh04 发表于 2013-1-29 11:51:29

服务器推技术之Pushlets的使用 二

Pushlet 是一个开源的 Comet 框架,在设计上有很多值得借鉴的地方,对于开发轻量级的 Comet 应用很有参考价值。Pushlets的下载地址是 http://www.pushlets.comPushlet 使用了观察者模型:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。Pushlet支持ajax,flash,applet等多种形式客户端,其中以ajax的客户端集成相对简单。这里就不在介绍。详细参看实例里面stock部分。这里只是简单介绍如何创建基于FLASH客户端的使用。首先创造服务器端程序:并将pushlet.jar引入到工程,将pushlet.propertiessources.properties拷贝到/WEB-INFO/classes目录下,并在sources.properties中填写如下语句source8=CometDemo.cn.CometDemoPull$CometRatePull然后创建java文件如下:-----------------------------------------------CometDemoPull.javapackage CometDemo.cn;import nl.justobjects.pushlet.core.Event;import nl.justobjects.pushlet.core.EventPullSource;import nl.justobjects.pushlet.util.Rand;public class CometDemoPull {      static public class CometRatePull extends EventPullSource{      @Override      protected long getSleepTime() {            return 3000L; //这里是设置了一个轮回的时间间隔      }      @Override      protected Event pullEvent() {            Event event = Event.createDataEvent("/CometDemo/TestRate"); //这里创建一个服务。            event.setField("JPY",Rand.randomInt(1, 100)); //以下是发送到客户端的数据            event.setField("GBR",Rand.randomInt(1, 100));            event.setField("RMB",Rand.randomInt(1, 100));            event.setField("USD",Rand.randomInt(1, 100));            return event;      }            }}----------------------------------------------------------------------------------在web.xml中添加如下servlet影射:    <!-- Define the pushlet servlet -->    <servlet><servlet-name>pushlet</servlet-name><servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class><load-on-startup>1</load-on-startup></servlet><!-- Define the Servlet Mappings. --><!-- The pushlet --><servlet-mapping><servlet-name>pushlet</servlet-name><url-pattern>/pushlet.srv</url-pattern></servlet-mapping>=================================以上服务器端完成。然后是flash客户端这里我们原来pushlet的flash例子基础之上进行修改。原来的例子没有发送数据只是保持和服务器连接。这里将他修改为接受自定义数据的flash客户端代码修改如下:------------------------------------------------------------flashfunction display(text) {    panel = panel+text+newline;    panel.scroll = panel.maxscroll;}function displayEvent(xmlObject) {    attributes = xmlObject.attributes;    for (var j in attributes) {      text = text + " " + j + "=" + attributes;    }    display(text);}var eventXML;var intervalID;var sessionID;var host = "http://localhost:8080/CometDemo";var path = "/pushlet.srv?p_event=join-listen&p_subject=/CometDemo/TestRate&p_format=xml-strict&p_mode=pull";var refreshPath="/pushlet.srv?p_event=refresh&p_id="loadXML(host, path);function loadXML(host, path) {    url = host + path;    eventXML = new XML();    eventXML.ignoreWhite = true;    eventXML.onLoad = myLoad;    eventXML.load(url);    clearInterval(intervalID);}function myLoad(ok) {    if (ok == true) {      handleEvents(eventXML);    } else {      display("Error receiving event");    }}function handleEvents(xmlObject) {    var children = xmlObject.firstChild.childNodes;    for (i=0; i
页: [1]
查看完整版本: 服务器推技术之Pushlets的使用 二