服务器推技术之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]