pushlet针对特定用户推送功能实现
题记:最近再做一个项目,需要后台向前台推送消息,刚开始也是一头雾水,各种为难,后来各种百度,找到了java框架下的pushlet,说道这里对作者表示一下感谢。
后台向前台推送功能,用pushlet可以很好的实现,但是pushlet 默认做的是多播,就是向客户端推送消息,没有指定用户。上网搜索各种资料查询针对特定用户的推送,网上也是各种解释,各种资料。但是好用的真心,不多。好在皇天不负有心人,在我即将放弃之际,找到了这个网址
pushelet-UserUnicast ( http://www.easyproject.cn/easyunicast/zh-cn/index.jsp#readme )这个框架就是在pushle上稍作修改后可以实现针对特定用户推送消息。首先作者已经将针对特定用户推送功能介绍的十分详细,而且使用起来十分方便。过多的细节我就不作介绍。下边简单的讲一下我的使用。
1、框架,本项目是 springMVC+spring+easyUI+mybatis整合的项目,这里推送功能用的便是 pushlet-UserUnicast(亲测好用)。
2、关于项目的框架构建这里不多讲了,默认是项目已经成型,就等着整合推送功能。
3、下载 pushlet-UserUnicast:
作者给的网址:https://github.com/ushelp/Pushlet-UserUnicast
如果有些人上不了外网,这里我也提供一个简单的下载链接:http://download.csdn.net/detail/newpanderking/8516023
(说明一下,两个连接的内容是一样的,上边的是作者在git上给的,可能会有更新,下边是我下载后放在csdn上的,虽然有积分要求,也是为了自己下载资源方便,还请谅解,分数并不多,如果没有积分就从第一个链接下载即可)
4、项目整合,作者提供的demo中已经有我们要整合的所有东西,这里我简单的讲讲和我的项目整合过程。
a) 为项目引入lib下的jar包:pushlet-userunicast.jar log4j.jar
b) 在 src
或 WEB-INF
中加入resource下的配置文件:log4j.properties pushlet.properties sources.properties
c) 在web端导入js库中导入 ajax-pushlet-client.js
以上这些文件在3中提供的下载里边均有,无需修改。
5、配置web.xml 配置 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> <servlet-mapping> <servlet-name>pushlet</servlet-name> <url-pattern>/pushlet.srv</url-pattern> </servlet-mapping>
6、后台我对作者的servlet类提取了下,做成通用的类。
package com.washcar.util; import nl.justobjects.pushlet.core.Dispatcher; import nl.justobjects.pushlet.core.Event; public class MsgPushUtil { public static void pushMsg(String listener,String msg,String userId,String type) { Event event = Event.createDataEvent(listener); event.setField("msg", msg); Dispatcher.getInstance().unicastUserId(event, userId, type); } }
简单的对这个类说下,这是一个发送消息的util静态类,当我们需要推送消息的时候在调用。一般我是在controller层调用的。
MsgPushUtil.pushMsg("/push/test", "你有一条新的消息!", "1", "all");
msg : 就是推送到前台的消息。 userId:就是要推送给某个固定用户,在前台写js的时候,会再次说怎么赋值userId。
type:有三种类型,first, all, last. 他们分别是值,推送个,固定用户的第一次连接,所有连接和最后一次连接。形象点说就是,同一个用户用多个浏览器同时打开建立了session,到底是推送给哪一个连接呢。这时候first,all,last就有用了。
7、jsp页面,
<script type="text/javascript" src="resources/js/ajax-pushlet-client.js"></script> <script type="text/javascript"> PL._init(); PL.userId = userId; PL.joinListen('/push/test'); function onData(event) { util.show(event.get("msg")); } window.onRefreshAck = function() { document.getElementById("status").innerHTML="监听连接成功!"; } </script>
ps:userId就是和后台传递过来的id一致,在正式开发项目时,可以用session中用户的主键作为唯一性标识符来确定。
到这里基本上就能达成后台消息推送功能.
这里简单的展示一下运行结果:
posted on 2015-03-19 19:54 NewPanderKing 阅读(773) 评论(0) 编辑 收藏 举报