`
isoloist
  • 浏览: 62944 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

pushlet 之消息通知

阅读更多
最近做完一个用户上传视频文件,在服务器完成转码的服务。根据需要设计了一个简单的消息通知系统,使用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来发送当前的消息数量。比如在用户登录后,发送给用户一条消息告诉用户有多少条未读消息,用户可以手动标记消息为已读或者删除消息。



分享到:
评论
8 楼 231820194 2014-02-20  
请问楼主使用 Dispatcher.getInstance().multicast(event);  方法的时候

sources.properties这个怎么配置
7 楼 isoloist 2013-01-31  
Reset 写道
用 ajax-pushlet-client.js 的都不算长连接吧 应该是轮询

期待websocket的方式
6 楼 isoloist 2013-01-31  
sblig 写道
消息发送失败导致pushlet的session关闭 
这个你怎么解决的,现在我也碰到这个问题了

这个没找到好办法啊,刷新页面会重新建立session,然后就可以继续发送。
5 楼 isoloist 2013-01-31  
xsgkaka 写道
你这个能判断是否上传成功吗?似乎不能把,你这个还是定时向客户端发送请求的吧


上传不是在这里完成的。我们上传走的通过一个flash上传。
4 楼 xsgkaka 2013-01-06  
你这个能判断是否上传成功吗?似乎不能把,你这个还是定时向客户端发送请求的吧
3 楼 sblig 2012-11-12  
消息发送失败导致pushlet的session关闭 
这个你怎么解决的,现在我也碰到这个问题了
2 楼 richardri 2012-11-07  
楼主联系方式是什么?
1 楼 Reset 2012-08-24  
用 ajax-pushlet-client.js 的都不算长连接吧 应该是轮询

相关推荐

    pushlet 之 Pushlet使用手把手实例

    这种技术在实时性要求高的场景,如股票交易、在线聊天、实时通知等,具有显著优势。本篇将通过一个实例,深入讲解如何使用Pushlet。 一、Pushlet 概述 Pushlet 是由Caucho公司开发的,其核心思想是基于HTTP长连接...

    pushlet定时向前台推送消息

    在"pushlet定时向前台推送消息"的场景中,Pushlet被用来创建一个能够定时发送消息到前端的应用。这个应用可能包含以下几个关键组成部分: 1. **服务器端组件**:Pushlet服务器端通常会有一个或多个服务,它们负责...

    Pushlet消息推送

    这种推送方式适用于私密性强的信息传递,如私人消息、定制通知等。在这种模式下,服务器需要知道接收者的标识,并且只能向指定的连接发送数据。 在实现Pushlet时,主要涉及以下技术点: - **HTTP长连接**:传统的...

    pushlet.jar 和示例工程

    "pushlet.jar 和示例工程"是一个专注于实现服务器端向客户端主动推送消息的框架,它在Web开发领域中扮演着重要角色。Pushlet框架的设计旨在克服传统的HTTP协议中客户端请求、服务器响应的被动通信模式,转而采用一种...

    pushlet定时向页面发送消息demo

    5. **实际应用**:Pushlet技术常用于实时聊天、股票报价、在线游戏等场景,需要及时将服务器端的变化通知给用户。 这个demo可能包括了服务器端的Java代码,客户端的HTML和JavaScript文件,以及必要的配置文件。通过...

    pushlet实现简单的用户聊天

    在IT行业中,Pushlet是一种基于Java的推送技术,主要用于实现实时的数据传输,尤其是在Web应用中创建实时聊天、通知服务等功能。Pushlet是基于HTTP连接持久化的概念,它允许服务器主动向客户端推送数据,而无需...

    使用Ext Pushlet 实现的点对点聊天功能最新

    来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, ...

    pushlet实例以及jar

    Pushlet是一种轻量级的、基于服务器推送(Server-Sent Events, SSE)技术,用于实现实时数据传输,特别是在Web应用中实现消息即时通知。 在Web开发中,传统的HTTP协议是基于请求-响应模型的,即客户端发起请求,...

    使用Ext Pushlet 实现的点对点聊天功能

    来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, ...

    修改后的pushlet的jar包和js

    多播是指服务器可以同时将信息推送给多个客户端,适用于广播消息或通知的场景;单播则是服务器仅向特定的单一客户端推送信息,适用于个性化推送或私密通信。参考链接中的博客文章可能提供了关于如何实现这些功能的...

    服务器推送——PushLet的应用<一>

    在实际应用中,PushLet通常用于构建实时聊天、实时通知、实时数据更新等场景。例如,在一个在线协作工具中,当一个用户编辑文档时,其他所有在线的用户可以通过PushLet立即接收到这个变化,实现同步查看。 PushLet...

    网页推送pushlet的demo

    当有新的事件发生时,事件生产者会通知Pushlet Server。 4. **Event Consumers**:事件消费者即客户端,它们接收到服务器推送的数据后进行相应的处理,如更新界面、执行业务逻辑等。 在本Demo中,"pushletTest...

    pushlet2.0.4-demo-增加指定人推送

    Pushlet 2.0.4 是一个官方发布的消息推送框架,它为开发者提供了一种高效、可靠的实时通信机制,用于在服务器与客户端之间传递数据。在最新的版本 2.0.4 中,该框架引入了一个重要的新特性——支持指定用户推送,这...

    pushlet.jar(2.0.4)

    server端向浏览器client发送通知这种通讯模式在J2EE应用中很常见,通常使 Pushlet服务器端Java类UML图 Pushlet服务器端Java类UML图 用采用RMI、CORBA或者自定义TCP/IP信息的applet来实现。这些技术往往由于复杂而...

    http长连接(服务器推)使用pushlet教程示例以及jar包源码

    "点对点"则表示服务器可以将信息直接推送给特定的客户端,适用于个性化通知或私密消息传递。 使用Pushlet实现服务器推技术时,你需要理解以下关键概念: 1. **订阅**(Subscription):客户端通过发送订阅请求来...

    pushlet2.0 示例 带jar包

    使用Pushlet,开发者可以创建实时的应用场景,如股票交易、在线聊天、实时通知等。在Java Web应用中,Pushlet可以通过Servlet容器(如Tomcat)来部署和运行。其工作流程大致如下: 1. **建立连接**:客户端(通常是...

    基于Pushlet推技术的网络应用程序开发的研究

    Pushlet技术相比传统的轮询、服务器调用和消息机制,具有以下优势: 1. 通用性强,适用于多种网络应用程序。 2. 实现服务器与客户端的同步,服务器端数据变化会立即通知客户端。 3. 减少网络冗余数据,仅推送变化...

    pushlet 例子

    Pushlet 是一个基于Java的...5. 实时应用:Pushlet适用于需要实时数据更新的场景,如聊天应用、实时通知等。 通过深入研究这个例子,开发者可以了解如何在实际项目中应用Pushlet和Comet技术,提高Web应用的实时性能。

Global site tag (gtag.js) - Google Analytics