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编辑  收藏  举报

导航