最近使用pushlet做了一个新消息及时提醒的功能。我使用的框架是Spring + Spring MVC + MyBatis,没有仔细研究其原理,只是简单的将其整合到我的项目中。下面总结一下使用步骤,将来使用的时候也可以再参考一下。
1、从官网下载pushlet的压缩包(版本为:pushlet-2.0.4);
2、将pushlet.jar(目录为:pushlet-2.0.4\lib)拷贝到lib目录下;
3、解压,并将pushlet.properties和sources.properties(目录为:pushlet-2.0.4\webapps\pushlet\WEB-INF\classes\)两个文件拷贝到我们自己项目的WEB-INF目录下。其中pushlet.properties不需要修改,而sources.properties稍后需要根据实际情况调整;
4、在web.xml中加入如下配置:
<servlet> <servlet-name>pushlet</servlet-name> <servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>pushlet</servlet-name> <url-pattern>/pushlet.srv</url-pattern> </servlet-mapping>其中<url-pattern>/pushlet.srv</url-pattern>使用默认配置。
5、创建一个Controller,里面有一个静态的内部类,需要继承自nl.justobjects.pushlet.core.EventPullSource类。由于,我在页面中弹出的提醒消息需要通过数据库获取,所以,在Controller中需要有相关的参数。具体代码如下:
package com.sinowel.ucp.multimessage.controller; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import com.sinowel.ucp.multimessage.domain.MultiMessage; import com.sinowel.ucp.multimessage.service.AbstractMultiMessageService; import nl.justobjects.pushlet.core.Event; import nl.justobjects.pushlet.core.EventPullSource; /** * 类描述: 新消息提醒控制器 修改历史: * * @author weina * @date 2014-1-12 上午10:11:12 * @description 其它: */ @Controller public class PendingMessageTipController { private static final Logger logger = LoggerFactory.getLogger(PendingMessageTipController.class); private static AbstractMultiMessageService mulitMessageService; public static AbstractMultiMessageService getMulitMessageService() { return mulitMessageService; } @Autowired public void setMulitMessageService( AbstractMultiMessageService mulitMessageService1) { mulitMessageService = mulitMessageService1; } static public class PendingMessageTipPlushlet extends EventPullSource { // 休眠10秒 @Override protected long getSleepTime() { return 10000; } @Override protected Event pullEvent() { Event event = Event.createDataEvent("/getNewMessage"); MultiMessage multiMessage = new MultiMessage(); multiMessage.setDestAgentId("admin"); multiMessage.setStatus("0"); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { String tipMessage = ""; // 此处省略业务代码 // …… event.setField("message", new String(tipMessage.getBytes("UTF-8"), "ISO-8859-1")); } catch (Exception e) { if (logger.isDebugEnabled()) e.printStackTrace(); logger.info(e.toString()); } return event; } } }
6、修改sources.properties文件,将source1修改为:
source1=com.sinowel.ucp.multimessage.controller.PendingMessageTipController$PendingMessageTipPlushlet其他的source全部删除掉。
7、将ajax-pushlet-client.js引入文本项目,如WebContent\js\;
8、在需要弹出消息窗口的页面引人ajax-pushlet-client.js文件;此处需要说明一下,使用前在网上也查找过一下资料,可以参考http://cuisuqiang.iteye.com/blog/1416771。首先修改_getWebRoot函数:
// index = src.indexOf("lib"); index = src.indexOf("js");
但是都不能实现我需要的功能——在非WebContent\index.jsp页面弹出提示窗口,而是在WebContent\WEB-INF\view\jsp\XXX\XXX.jsp页面上弹出提示窗口(这个是我的web项目的首页)。使用网上的资料时,在WebContent根目录下的jsp页面中可以实现很轻松的实现弹出窗口效果。但是在我的WebContent\WEB-INF\view\jsp\XXX\XXX.jsp页面,一直不出现。最后查看了一下ajax-pushlet-client.js的源码。发现_onEvent方法中有如下内容:
if (eventType == 'data') { PL._setStatus('data'); PL._doCallback(event, window.onData); }我使用的eventType是data类型的,所以其他的没关注。发现它回调的函数是window.onData。而我的WebContent\WEB-INF\view\jsp\XXX\XXX.jsp页面上的onData函数
PL._init(); PL.joinListen('/getNewMessage'); function onData(event) { showMessage(event.get("message")); }却一直无法调用。所以,我修改了ajax-pushlet-client.js的源码:增加一个fun变量用来保存要执行的自定义函数,增加setFun和getFun两个函数分别用来设置和获取自定义函数。具体内容如下:
var PL = { NV_P_FORMAT: 'p_format=xml-strict', NV_P_MODE: 'p_mode=pull', pushletURL: null, webRoot: null, sessionId: null, // add by weina begin fun : null, // add by weina end // …… state: 1, /************** START PUBLIC FUNCTIONS **************/ // add by weina begin setFun : function(funName) { fun = funName; }, getFun : function () { return fun; }, // add by weina end // ……_onEvent函数修改内容如下:
相关推荐
【Pushlet 使用手把手实例详解】 Pushlet 是一个开源的、基于Java的实时信息发布系统,它采用推送技术(Push Technology)实现服务器向客户端实时发送数据,而无需客户端频繁发起请求。这种技术在实时性要求高的...
在使用 Pushlet 进行部署时,以下是一些关键步骤: 1. **下载 Pushlet**:首先,你需要从官方网站获取 Pushlet 的最新版本,例如文中提到的 pushlet-2.0.4 版本。 2. **创建 Web 项目**:在 IDE(如 MyEclipse)中...
3. **事件驱动**:Pushlet使用事件驱动的架构,当服务器端有新的数据可用时,会触发事件并进行推送。 4. **兼容性**:可能支持多种操作系统和Web服务器,以适应不同的部署环境。 5. **API**:提供一套API供开发者...
这通常涉及到创建一个持久的HTTP连接,使用WebSocket或Comet技术(Pushlet使用的是Comet)。 3. **消息处理**:在服务器端,你需要创建一个处理聊天消息的逻辑,包括接收新消息、存储消息、以及将消息推送给正确的...
在服务器端,Pushlet使用`EventSource`和`EventSourceManager`来管理和处理事件,`EventSource`实现了`Runnable`接口,可以在多线程环境中运行,确保服务器能够并发地处理多个客户端的请求。 总的来说,Pushlet和...
Pushlet使用了HTTP长连接(Persistent HTTP Connections)和 Comet 模型。Comet模型是一种处理服务器向浏览器推送数据的技术,它通过保持一个开放的HTTP连接直到有新的数据需要发送或连接超时。Pushlet客户端建立与...
6. **Keep-Alive机制**:为了保持服务器与客户端的连接,Pushlet使用了Keep-Alive机制。服务器会在连接空闲一段时间后发送心跳消息,防止网络连接因超时而关闭。 7. **Comet技术**:Pushlet是早期实现Comet技术的库...
4. **Protocol**:Pushlet使用一种自定义的协议来传输数据,这个协议基于HTTP,但加入了额外的控制信息,以便于服务器管理和维护持久连接。 在使用Pushlet时,开发者需要遵循以下步骤: 1. **建立连接**:客户端...
6. **pushlet_文档.doc**:这可能是一个详细的Pushlet使用手册或开发指南,包含了Pushlet的安装、配置、API使用等方面的指导。 7. **pushlet_test**:这个文件可能是Pushlet的测试脚本或者测试案例,用于验证...
Pushlet使用了Servlet和JavaServer Pages (JSP) 技术,允许开发者创建能够实时更新的Web应用。它的工作原理是客户端与服务器建立持久连接,服务器端一旦有新数据,就会通过这个连接推送给客户端。 2. **HTTP长连接*...
Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。 ...
- **保持连接**:由于HTTP连接默认是短连接,因此Pushlet使用了HTTP的Keep-Alive特性,使连接在一段时间内保持打开状态,直到服务器或客户端关闭连接。 - **断线重连**:为了应对网络波动导致的连接中断,客户端...
服务器端,Pushlet使用一个叫做`PushServer`的类来处理来自客户端的订阅请求。订阅者通过发送一个HTTP GET请求到特定URL来订阅消息,URL中包含了订阅的主题。服务器端会将这个订阅请求保存下来,并保持与客户端的...
为了更好地理解和使用 Pushlet 2.0.4 的指定用户推送功能,你可以参考提供的"pushlet-2.0.4实例增加指定用户推送"压缩包文件。这个实例包含了源代码、配置文件和相关文档,可以帮助你快速搭建一个简单的示例应用,...
Pushlet使用HTTP长连接实现推送,通过保持服务器与客户端之间的HTTP连接开放,一旦有新数据可用,服务器就能立即推送到客户端,而无需等待客户端发起新的请求。 在Pushlet-2.0.3这个版本中,主要包括以下几个组件和...
pushlet例子,Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的...
4. **Protocol**:Pushlet使用自定义的协议进行通信,这个协议基于HTTP,但扩展了HTTP的请求-响应模式,使其支持双向通信。 5. **Session**:每个客户端连接到服务器时,都会创建一个session。这个session保持开放...
Pushlet使用的就是长轮询机制,即客户端发起一个HTTP请求,服务器接收到请求后并不立即响应,而是保持连接状态,直到有新的数据需要推送时才返回响应,关闭连接,客户端收到数据后再次发起新的请求,如此循环。...
- **Pushlet CookBook**:《Pushlet学习(二) -- Pushlet CookBook部分翻译 + 注释.htm》可能是对Pushlet使用手册的中文译文,包含了一些基础用法和实例,注释提供了更直观的理解,帮助开发者快速上手。 3. **发布...
Pushlet使用了Comet技术,这是一种服务器向客户端推送数据的方法,打破了传统的HTTP请求-响应模型。在Comet模式下,服务器会保持一个持久连接,直到有新数据可用时才发送给客户端,这样可以实现实时更新。Pushlet...