下载pushlet-2.0.4,解压后文件夹内有一些目录!
我们只关心 src 源文件,和 webapps 示例工程。将 pushlet.war 拷贝到Tomcat部署目录下,启动Tomcat,可以看示例工程!
示例工程有三个,我们打开 Pushlet Demos ,然后看到有许多可以进行测试的示例,点开 Basics 查看!
选择消息推送方式,然后选择订阅的主题,页面会显示后台推送的消息!
下面我们来新建一个工程,来自己手动建立一个测试示例工程!
为了查看更明显,不再拷贝Jar包而是拷贝源码!
log4j.properties,pushlet.properties,sources.properties,style.css,均拷贝自部署后Tomcat工程下的 pushlet 文件夹!
其中JS文件夹里面的内容其实是 pushlet 下 lib 下的内容,为了规范和统一特更名!
首先我们要修改一下 js-pushlet-client.js ,这个JS文件内取得系统跟路径的方法会有问题,所以在此更改一下!
原来的方法:
function getWebRoot() { if (pushletWebRoot != null) { return pushletWebRoot; } var head = document.getElementsByTagName('head')[0]; var nodes = head.childNodes; for (var i = 0; i < nodes.length; ++i) { var src = nodes.item(i).src; if (src) { var index = src.indexOf("js-pushlet-client.js"); if (index >= 0) { pushletWebRoot = src.substring(0, index); break; } } } return pushletWebRoot; }
更改为:
//js获取项目根路径,如: http://localhost:8083/nms function getWebRoot(){ //获取当前网址,如: http://localhost:8083/nms/share/meun.jsp var curWwwPath=window.document.location.href; //获取主机地址之后的目录,如: nms/share/meun.jsp var pathName=window.document.location.pathname; var pos=curWwwPath.indexOf(pathName); //获取主机地址,如: http://localhost:8083 var localhostPaht=curWwwPath.substring(0,pos); //获取带"/"的项目名,如:/nms var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1); return(localhostPaht+projectName+"/"); }
如果按照原来的方式,则程序写的太死,不方便维护!
然后就是我们访问的页面 http://localhost:8080/pushlet/examples/raw/raw.html ,他的页面是英文的,可能有的人看的很麻烦!
虽然我的英文不怎么样,但是还是自我牺牲一下吧,翻译的不好的尽管板砖!
其实就是把里面的HTML内容拷贝到新建工程的 index.jsp 中:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <head> <title>消息推送模式与内容测试</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="style.css" rel="stylesheet"> <meta http-equiv="Pragma" content="no-cache"> <script type="text/javascript" src="<%=basePath %>js/pushlet_js/js-pushlet-client.js"></script> <script type="text/javascript"> var subscriptionId = null; // 加入或离开 function joinLeave(what) { if (what == 'joinStream') { p_join_listen(null, 'stream'); } else if (what == 'joinPull') { p_join_listen(null, 'pull'); } else if (what == 'joinPoll') { p_join_listen(null, 'poll'); } else if (what == 'leave') { p_leave(); subscriptionId = null; displayData('无消息或离开状态'); } } // 产生消息 function onData(event) { // Write the event as HTML table into content Element // p_debug(flag, "pushlet-app", 'event received subject=' + event.getSubject() ); displayData(event.toString()); } // 主题订阅成功 function onSubscribeAck(event) { subscriptionId = event.get('p_sid'); displayControl(event.toString()); displayData('订阅成功,等待消息'); } // Ack refresh function onRefreshAck(event) { displayData(event.toString()); } // Heartbeat on data channel function onHeartbeat(event) { displayData(event.toString()); } // 主题取消订阅成功 function onUnsubscribeAck(event) { subscriptionId = null; displayControl(event.toString()); displayData('取消订阅成功,无消息'); } // 捕获其他返回信息 function onEvent(event) { displayControl(event.toString()); } // 订阅主题 function subscribeUnsubscribe(subject) { if (p_getSessionId() == null) { alert('请先选择加入模式'); return; } if (subject == 'UNSUBSCRIBE') { // Unsubscribe all p_unsubscribe(); } else if (subject != '') { // Unsubscribe first if already subscribed if (subscriptionId != null) { p_unsubscribe(subscriptionId); } p_subscribe(subject, 'mylabel'); } } // 选择调试 function setDebug(value) { if (value == 'none') { p_setDebug(false); } else if (value == 'full') { p_setDebug(true); } else if (value == 'net') { p_setDebug(false); p_setNetDebug(true); } } function displayData(aString) { document.dataEventDisplay.event.value = aString; } function displayControl(aString) { document.controlEventDisplay.event.value = aString; } </script> </head> <body> <h2>消息推送测试</h2> <p>通过以下表单控制消息服务</p> <table border="0" cellpadding="0" cellspacing="0" > <tr> <td> <h3>加入/离开</h3> </td> <td> <h3>主题</h3> </td> <td> <h3>调试窗口</h3> </td> </tr> <tr> <td> <form name="joinForm"> <select name="joinField" onChange="joinLeave(this.value)"> <option selected value="" >请选择</option> <option value="joinStream">加入 (stream mode)</option> <option value="joinPull">加入 (pull mode)</option> <option value="joinPoll">加入 (poll mode)</option> <option value="leave">离开</option> </select> </form> </td> <td> <form name="subscribeForm"> <select name="selectField" onChange="subscribeUnsubscribe(this.value)"> <option selected value="" >选择主题</option> <option value="/system">系统信息</option> <option value="/temperature">天气情况</option> <option value="/stocks">网络连接</option> <option value="/stocks,/temperature">多主题订阅</option> <option value="/">所有消息</option> <option value="UNSUBSCRIBE">卸载主题</option> </select> </form> </td> <td> <form name="debugForm"> <select name="selectField" onChange="setDebug(this.value)"> <option selected value="none" >无调试</option> <option value="full">所有调试</option> <option value="net">进调试网络</option> </select> </form> </td> </tr> </table> <h3>控制和监控</h3> <p> 以下是事件监听情况,你需要先加入才能看到效果 </p> <form name="controlEventDisplay"> <table border="2" bordercolor="white" cellpadding="0" cellspacing="0" > <tr> <td> <textarea cols="40" rows="8" name="event"> 等待消息 </textarea> </td> </tr> </table> </form> <h3>消息监控</h3> <p> 以下是事件产生的消息内容,你需要选择主题后才能看到消息内容 </p> <form name="dataEventDisplay"> <table border="2" bordercolor="white" cellpadding="0" cellspacing="0" > <tr> <td> <textarea cols="60" rows="10" name="event"> 没有消息 </textarea> </td> </tr> </table> </form> <script type="text/javascript">p_embed()</script> </body> </html>
别忘记了工程需要日志记录的log4j包!运行后看到效果:
选择一个加入模式,选择一个主题,会看到后台推送的消息内容!
解说:
消息来源是定义在sources.properties中:
source1=nl.justobjects.pushlet.test.TestEventPullSources$TemperatureEventPullSource source2=nl.justobjects.pushlet.test.TestEventPullSources$SystemStatusEventPullSource source3=nl.justobjects.pushlet.test.TestEventPullSources$PushletStatusEventPullSource source4=nl.justobjects.pushlet.test.TestEventPullSources$AEXStocksEventPullSource source5=nl.justobjects.pushlet.test.TestEventPullSources$WebPresentationEventPullSource source6=nl.justobjects.pushlet.test.TestEventPullSources$PingEventPullSource
以上是示例自带的消息源
获取消息的步骤:
通过 p_join_listen 方法加入监听,加入模式有三种:stream,pull,poll
通过 p_leave 方法取消事件监听
通过 p_subscribe 方法订阅主题
通过 p_unsubscribe 方法取消订阅的主题
在操作过程中,会触发一些事件,例如订阅成功,取消主题订阅等消息通知,和有消息推送时触发的 onData 方法!
获取消息:
示例打印在页面时直接使用了 event.toString() !
我们也看到了他打印的内容:
p_event=data p_subject=/system/jvm p_seq=1 totalMemory=5177344 threads=25 maxMemory=66650112 freeMemory=433104 p_time=1349686051 p_sid=fyfaq
一个Key一个Value,如果想要获得某个值,查看手把手示例!
event.get("mess");
请您到ITEYE网站看原创,谢谢!
http://cuisuqiang.iteye.com/ !
自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!
相关推荐
本示例测试将帮助我们了解如何在实际项目中运用Pushlet。 首先,我们要理解Pushlet的基本工作原理。Pushlet使用了HTTP长连接(Persistent HTTP Connections)和 Comet 模型。Comet模型是一种处理服务器向浏览器推送...
"pushlet.jar 和示例工程"是一个专注于实现服务器端向客户端主动推送消息的框架,它在Web开发领域中扮演着重要角色。Pushlet框架的设计旨在克服传统的HTTP协议中客户端请求、服务器响应的被动通信模式,转而采用一种...
pushlet源码demo,提供有需要的同学学习,如有更好的实现或建议,欢迎提出
在压缩包文件"mypushlet"中,可能包含了Pushlet的源码和示例项目。通过查看源码,你可以理解Pushlet的工作流程,包括服务器端的`PushletServlet`、`PushletSession`等关键类,以及客户端如何使用`PushletClient`建立...
在这个示例中,包含了一个可以立即运行的push.jsp文件,这意味着用户无需进行额外的配置设置,只需直接运行此文件,就能体验到Pushlet的功能。 Pushlet的核心概念是"Publisher-Subscriber"(发布-订阅)模型,其中...
Pushlet Server负责接收和处理客户端的连接,Pushlet Client则作为客户端应用程序,负责建立和保持与服务器的连接,Event Dispatcher则根据需求将事件推送到特定的客户端。 在Pushlet框架中,"一对多"的信息推送...
【标题】:“Pushlet简单示例” 在IT行业中,Pushlet是一个开源的Java库,它实现了服务器向客户端推送数据的技术,这种技术被称为“服务器推送”或“Comet”技术。Pushlet项目由Jens Schauder创建,它允许服务器在...
在pushlet-2.0.3这个压缩包中,可能包含了Pushlet框架的源代码、文档、示例代码和配置文件等,用于帮助开发者理解和使用Pushlet。开发者可以通过阅读源码了解其工作原理,参考示例快速入门,通过配置文件定制Pushlet...
开发者可以通过解压提供的pushlet-2.0.3压缩包,获取源代码、文档和示例,以便更好地理解和集成Pushlet到自己的项目中。 在使用Pushlet时,开发者需要注意以下几点: 1. **性能优化**:由于Pushlet依赖持久连接,...
当有新数据产生时,Publisher会将数据推送到与之相连的Subscribers。 2. **Subscriber**:订阅者,客户端的角色,用于接收来自Publisher的数据。Subscriber保持与Server的长连接,等待数据推送。 3. **Event ...
服务器推 pushlet 服务器推 pushlet 服务器推 pushlet 服务器推 pushlet
这个名为"pushlet-record.txt"的文件可能包含了Pushlet框架的使用记录、日志信息或者是一些示例代码。分析这个文件可以帮助你更好地理解和使用Pushlet框架,例如,你可以找到服务器如何处理推送事件,客户端如何建立...
标题中的“pushlet实例以及jar”表明我们即将讨论的是一个基于Pushlet技术的示例项目,其中包含了必要的jar文件。Pushlet是一种轻量级的、基于服务器推送(Server-Sent Events, SSE)技术,用于实现实时数据传输,...
Servlet映射到`/pushlet.srv`路径,这是客户端与服务器交互的默认URL。如果更改此URL,记得同时更新客户端JavaScript代码中的相应引用。 5. **客户端JavaScript使用**:在HTML页面中,你需要引入`ajax-pushlet-...
【Pushlet服务器推技术】是一种实时通信技术,主要用于构建...在压缩包文件“pushlet”中,可能包含了实现Pushlet技术的源代码、配置文件和示例应用,供开发者学习和参考,以便在自己的项目中集成和使用Pushlet服务。
【Pushlet的JAR包和文档】是一组与实时通信技术相关的资源,主要涉及Pushlet项目,这是一种基于Java实现的Comet风格的Web应用工具。Pushlet是早期实现服务器推送(Server-Side Push)技术的一个重要框架,它利用HTTP...
当客户端(例如,一个Web浏览器)与Pushlet Server建立连接后,服务器会保持这个连接打开,直到客户端断开或者服务器端有新的消息需要发送。一旦有新消息,Pushlet Server会立即通过已打开的连接将消息推送给客户端...
1. **下载 Pushlet**:首先,你需要从官方网站获取 Pushlet 的最新版本,例如文中提到的 pushlet-2.0.4 版本。 2. **创建 Web 项目**:在 IDE(如 MyEclipse)中创建一个新的 Web 项目,命名为 pushletproj。 3. *...