最近做完一个用户上传视频文件,在服务器完成转码的服务。根据需要设计了一个简单的消息通知系统,使用pushlet实现。如有错误,欢迎指正,非常感谢。
[资源]
官方网站:http://www.pushlets.com/ 下载到pushlet的jar包,解压后可以看到官方的例子。
在实践中参考了pushlet-2.0.4\webapps\pushlet\examples\ajax\ajax-2.html的例子
第一步
将pushlet.jar放到工程的lib目录中,将pushlet-2.0.4\webapps\pushlet\lib\js-pushlet-client.js放到网页能访问的目录,将pushlet-2.0.4\webapps\pushlet\WEB-INF\classes\pushlet.properties和pushlet-2.0.4\webapps\pushlet\WEB-INF\classes\sources.properties拷贝到工程目录的classes目录下。
第二步
使用pushlets在网页客户端中配置非常简单
在网中页面引用如下代码
<script type="text/javascript" src="../../lib/ajax-pushlet-client.js">
</script>
<script type="text/javascript">
//可以设置debug为true,会在新标签页中打印debug信息,调试的时候非常有用。
PL.setDebug(false);
// Pushlet Event Callback from Server
//回调
function onEvent(event) {
pr(event.toString());
}
//订阅topic
function joinListen() {
pr('joinListen...');
PL.joinListen('/pushlet/ping');
}
//取消订阅
function leave() {
pr('leaving...');
PL.leave();
}
// 打印信息
function pr(aString) {
document.disp.event.value = aString;
}
//-->
</script>
第三步
在工程的web.xml中添加配置如下
<!-- 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>/js/pushlet.srv</url-pattern>
</servlet-mapping>
其中url-pattern跟前面ajax-pushlet-client.js放置的目录有关,需要根据自己的项目路径调整。
第四步
服务器端实现pushlets有两种方式,第一种使用eventpullsource,需要实现包含一个继承了EventPullSource的内部静态类,如下面代码中的EncodeJobQuery。
public class EncodeJobQuery {
public static class EncodeJobEventPullSource extends EventPullSource {
Logger log = Logger.getLogger(getClass());
@Autowired
PvmsEncodeMessageManager encodeMessageManager;
@Override
protected long getSleepTime() {
return 5000l;
}
@Override
protected Event pullEvent() {
//参数是subject,与js中的subject相同
Event event = Event.createDataEvent("/pushlet/ping");
event.setField("msg", "encoding....");
return event;
}
}
}
同时要在classes/sources.properties文件中增加一个行。
source7=cn.com.people.tv.pvms.encode.EncodeJobQuery$EncodeJobEventPullSource
第二种方法是在程序中调用Dispatcher.getInstance().multicast(event),除了multicast还有其他两种方法用来发送消息。
String subject = "/pushlet/ping"
Event event = Event.createDataEvent(subject);
event.setField("msg", "ping.....");
PvmsEncodeMessage.MSG_MESSAGE_COUNT);
Dispatcher.getInstance().multicast(event);
总结:
在使用的过程中遇到了若干问题
1.怎么实现根据用户来推送消息
我在实现的时候为不同的用户定义不同的topic,根据用户id来区分。看了文档介绍,说可以绑定pushlet的session,没研究明白具体怎么操作。我的实现方式缺点是,如果服务器重启或者消息发送失败导致pushlet的session关闭,那么后续的消息就没办法发送给用户。
2.发送离线消息
我把消息存在服务器,只用pushlet来发送当前的消息数量。比如在用户登录后,发送给用户一条消息告诉用户有多少条未读消息,用户可以手动标记消息为已读或者删除消息。
分享到:
相关推荐
这种技术在实时性要求高的场景,如股票交易、在线聊天、实时通知等,具有显著优势。本篇将通过一个实例,深入讲解如何使用Pushlet。 一、Pushlet 概述 Pushlet 是由Caucho公司开发的,其核心思想是基于HTTP长连接...
在"pushlet定时向前台推送消息"的场景中,Pushlet被用来创建一个能够定时发送消息到前端的应用。这个应用可能包含以下几个关键组成部分: 1. **服务器端组件**:Pushlet服务器端通常会有一个或多个服务,它们负责...
这种推送方式适用于私密性强的信息传递,如私人消息、定制通知等。在这种模式下,服务器需要知道接收者的标识,并且只能向指定的连接发送数据。 在实现Pushlet时,主要涉及以下技术点: - **HTTP长连接**:传统的...
"pushlet.jar 和示例工程"是一个专注于实现服务器端向客户端主动推送消息的框架,它在Web开发领域中扮演着重要角色。Pushlet框架的设计旨在克服传统的HTTP协议中客户端请求、服务器响应的被动通信模式,转而采用一种...
5. **实际应用**:Pushlet技术常用于实时聊天、股票报价、在线游戏等场景,需要及时将服务器端的变化通知给用户。 这个demo可能包括了服务器端的Java代码,客户端的HTML和JavaScript文件,以及必要的配置文件。通过...
在IT行业中,Pushlet是一种基于Java的推送技术,主要用于实现实时的数据传输,尤其是在Web应用中创建实时聊天、通知服务等功能。Pushlet是基于HTTP连接持久化的概念,它允许服务器主动向客户端推送数据,而无需...
来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, ...
Pushlet是一种轻量级的、基于服务器推送(Server-Sent Events, SSE)技术,用于实现实时数据传输,特别是在Web应用中实现消息即时通知。 在Web开发中,传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,...
来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, ...
多播是指服务器可以同时将信息推送给多个客户端,适用于广播消息或通知的场景;单播则是服务器仅向特定的单一客户端推送信息,适用于个性化推送或私密通信。参考链接中的博客文章可能提供了关于如何实现这些功能的...
在实际应用中,PushLet通常用于构建实时聊天、实时通知、实时数据更新等场景。例如,在一个在线协作工具中,当一个用户编辑文档时,其他所有在线的用户可以通过PushLet立即接收到这个变化,实现同步查看。 PushLet...
当有新的事件发生时,事件生产者会通知Pushlet Server。 4. **Event Consumers**:事件消费者即客户端,它们接收到服务器推送的数据后进行相应的处理,如更新界面、执行业务逻辑等。 在本Demo中,"pushletTest...
Pushlet 2.0.4 是一个官方发布的消息推送框架,它为开发者提供了一种高效、可靠的实时通信机制,用于在服务器与客户端之间传递数据。在最新的版本 2.0.4 中,该框架引入了一个重要的新特性——支持指定用户推送,这...
server端向浏览器client发送通知这种通讯模式在J2EE应用中很常见,通常使 Pushlet服务器端Java类UML图 Pushlet服务器端Java类UML图 用采用RMI、CORBA或者自定义TCP/IP信息的applet来实现。这些技术往往由于复杂而...
"点对点"则表示服务器可以将信息直接推送给特定的客户端,适用于个性化通知或私密消息传递。 使用Pushlet实现服务器推技术时,你需要理解以下关键概念: 1. **订阅**(Subscription):客户端通过发送订阅请求来...
使用Pushlet,开发者可以创建实时的应用场景,如股票交易、在线聊天、实时通知等。在Java Web应用中,Pushlet可以通过Servlet容器(如Tomcat)来部署和运行。其工作流程大致如下: 1. **建立连接**:客户端(通常是...
Pushlet技术相比传统的轮询、服务器调用和消息机制,具有以下优势: 1. 通用性强,适用于多种网络应用程序。 2. 实现服务器与客户端的同步,服务器端数据变化会立即通知客户端。 3. 减少网络冗余数据,仅推送变化...
Pushlet 是一个基于Java的...5. 实时应用:Pushlet适用于需要实时数据更新的场景,如聊天应用、实时通知等。 通过深入研究这个例子,开发者可以了解如何在实际项目中应用Pushlet和Comet技术,提高Web应用的实时性能。