上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢。问题的关键就是那个SessionID,Pushlet默认是用java.rmi.server.UID参数的随机字符串作为会话标志,这就造成我们没法跟一个特点的用户对应上,也就是说客户必须在joinListen的时候提供一个他的ID,就像登陆qq时,输入用户名一样。好了,这里就列出怎么修改相关代码,实现上述功能。
同样,首先用MyEclipse新建一个web工程,我这里命名为PushletTest2。不同的是,我们不引用pushlet.jar包了,因为我们要更改源码,在下载pushlet的时候里面就包含源代码了,最外层是nl包,加入我的工程的src里。好了,加进去之后会报错,将log4j.jar加入引用就好了。之后,同样别忘了把pushlet.properties和sources.properties加入WebRoot/WEN-INF下。工程结构如下:

aaarticlea/bmp;base64,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" alt="" />

FirPush.java是自己写的一个触发推送动作的类,它是一个servlet,请求该servlet就触发向特定的用户推送信息的动作(当然,怎么触发推送动作还有很多种形式)。
web.xml代码如下:

<span style="font-size: x-small;"><?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>pushlet</servlet-name>
<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet>
<servlet-name>FirePush</servlet-name>
<servlet-class>com.mysrc.FirePush</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>pushlet</servlet-name>
<url-pattern>/pushlet.srv</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FirePush</servlet-name>
<url-pattern>/FirePush</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app></span>

Ok,接下来就是要进行修改了,首先打开ajax-pushlet-client.js。PL对象,在它的最开始添加一个属性userId:'',,因为分析ajax-pushlet-client.js之后会发现,所有的请求都是get方式,也就是说是将请求参数添加到url里的,我们要做的是在进行join请求的时候将userId加到url上。找到PL的_doRequest,它是一个函数,所有的请求都是通过调用它发出的,找到var url = PL.pushletURL + '?p_event=' + anEvent;这一行,这儿就是在构造请求参数,在它的后面加入代码:

if (anEvent == 'join' || anEvent == 'join-listen') {    url = url + '&userId=' + PL.userId;
}

好了,ajax-pushlet-client.js的修改就完成了。
接下来是test.html:

<html>
<head>
<script type="text/javascript" src="ajax-pushlet-client.js"></script>
<script type="text/javascript">
PL.userId='piero';
PL._init();
PL.joinListen('myevent1');
function onData(event) {
alert(event.get("key1"));
}
</script>
</head>
<body>
This is pushlet test page....<br>
</body>
</html>

然后就是修改pushlet的java源代码,找到nl.justobjects.pushlet.core包下的SessionManager类,将它的createSession方法改成:

public Session createSession(Event anEvent) throws PushletException {
// Trivial
//return Session.create(createSessionId());
return Session.create(anEvent.getField("userId", "visitor"));
}

这儿就使得建立的session的id是发送过来的userId,而不是一个随机字符串。getField的第二个参数是当得不到请求参数userId的值的时候设定的默认值。
好了,所有的准备工作都完成了,接下来就是通过userId给特点的用户推送信息了。
FirePush.java代码如下:

package com.mysrc;  

import java.io.IOException;  

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import nl.justobjects.pushlet.core.Dispatcher;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.SessionManager; public class FirePush extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
myUnicast();
//myMulticast();
//myBroadcast();
}
private void myUnicast()
{
if(SessionManager.getInstance().hasSession("piero")){
Event event = Event.createDataEvent("myevent1");
event.setField("key1", "houhou_yesttttt....");
Dispatcher.getInstance().unicast(event,"piero"); //向ID为piero的用户推送 System.out.println("success....");
}
else {
System.out.println("piero do not login....%%%%%%%%%%%%");
}
}
private void myMulticast()
{
Event event = Event.createDataEvent("myevent1");
event.setField("key1", "houhou....");
Dispatcher.getInstance().multicast(event); //向所有和myevent1名称匹配的事件推送 System.out.println("wa success....");
}
private void myBroadcast()
{
Event event = Event.createDataEvent("myevent1"); //向所有的事件推送,不要求和这儿的myevent1名称匹配
event.setField("key1", "dig hole....");
Dispatcher.getInstance().broadcast(event); System.out.println("asw success....");
}
}

这儿主要利用了dispatcher的unicat/multicat/broadcast方法。
好了,值得一提的是在ajax-pushlet-client.js有publish方法,也就是上面提到的触发信息推送动作,其实完全可以在前端调用这个js的publish函数向订阅了某事件的所有网页推送信息。test2.html代码如下:

<html>
<head>
<script type="text/javascript" src="ajax-pushlet-client.js"></script>
<script type="text/javascript">
PL.userId='juvenh';
PL._init(); PL.joinListen('event223');
function onData(event) {
alert(event.get("eventVal"));
} function sendnews(){
//PL.publish("myevent1","key1=dlut&ba=ls");
p_publish('myevent1', 'key1', 'dlut', 'ba', 'ls');
}
</script>
</head> <body>
This is my JSP page. <br>
<input type = "button" value="发消息" onclick="sendnews()"/>
</body>
</html>

上面代码中的PL.publish和p_publish完全等效,查看p_publish的代码,其实也是构造请求url。这儿的publish方法只能向订阅某一事件的所有网页推送消息,也即等同于multicast方法,无法向某一个特定的用户推送,解决方法还是向上面那样修改pushlet的java源代码,在nl.justobjects.pushlet.core包下的Controller.java中的protected void doPublish(Command aCommand);函数,看一下就会发现,这儿就是调用了dispacher的multicast函数,这儿改成unicast,前提是上面的js的publish里提供了userId。

Pushlet实现后台信息推送(二)的更多相关文章

  1. Pushlet实现后台信息推送(一)

    Pushlet是使用较多的后台向前台推送信息的工具.前台订阅某个感兴趣的事件joinListen,触发后台的Pushlet的servlet,为该请求会话建立session,默认这个sessionID是 ...

  2. iOS刚进入后台接受推送、打开推送调转到相应的界面

    刚进入后台的时候消息处理时候我用了本地推送!可以看我前边写的博客,怎么处理刚进入后台接收推送的案例,链接 /** 注释:打开推送的三种方式:-peter 1.apns的时候,结束进程退出后台:启动的时 ...

  3. 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能

    什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...

  4. 李洪强iOS之集成极光推送二iOS 证书 设置指南

    李洪强iOS之集成极光推送二iOS 证书 设置指南 创建应用程序ID 登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 在 iOS Provisioning ...

  5. EasyPusher手机直播推送是如何实现后台直播推送的

    本文由EasyDarwin开源团队成员John提供:http://blog.csdn.net/jyt0551/article/details/52276062 EasyPusher Android是使 ...

  6. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  7. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...

  8. Android消息推送(二)--基于MQTT协议实现的推送功能

    国内的Android设备,不能稳定的使用Google GCM(Google Cloud Messageing)消息推送服务. 1. 国内的Android设备,基本上从操作系统底层开始就去掉了Googl ...

  9. JAVA Web实时消息后台服务器推送技术---GoEasy

    ---恢复内容开始--- 越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

随机推荐

  1. C++学习基础十四——基础类型vector

    一.vector的使用 1. #include <vector> 2. 初始化的四种方法 vector<T> v1; vector<T> v2(v1); vecto ...

  2. ansible常用模块即用法

    Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块,通过 ansible-doc  -s  模块名  又可以查看该模块有哪些参数可以使用. 下面 ...

  3. PHP 扩展在 Linux(centos7)系统下的编译与安装 以 mysqli 为例

    (操作系统 Centos7,环境版本 php7) 01,进入到 PHP 解压后的源码包的的 ext 文件夹 02,查看是否存在 mysqli 扩展 => ls, 如果不存在需要去响应网站下载 ( ...

  4. js window.open隐藏参数提交

    1.采用form方式提交 var url = "page/public/exportExcel.jsp"; //create a form var tempForm = docum ...

  5. WIN10下VS CODE 更新后拓展宿主意外终止问题解决方法(每次系统更新都要删除一次git)

    S CODE最近更新后,一打开就会出现拓展宿主意外终止的错误,点重新加载等都不好用. 出现这个问题主要是和git有关,做如下操作处理就好: 打开vscode安装文件夹->resource文件夹- ...

  6. 火狐Firefox浏览器所有历史版本下载地址

    Mozilla Firefox 频繁的更新,导致许多好用的插件在更新后不能兼容,而且想换回低版本还不容易啊,官网上只看到最新版本和前一个版本的下载. 这里为大家提供了一个下载链接,是来自Mozilla ...

  7. HBase 入门

    使用条件: 海量数据百亿级的行 百万列,  准实时查询 使用场景:  比如金融,交通,电商,移动等 特点: 1:

  8. 【坑】tableView cell默认选中

    在tableView展示的过程时候,如果想一开始就有一些cell默认被选中,不能在cellForRowAtIndexPath中cell.selected=YES, 必须在willDisplayCell ...

  9. HBASE小结--待续使用

    构建在HDFS之上的分布式,面向列的存储系统,使用zookeeper做协同服务,在需要实时读写和随机访问超大规模数据集的时候使用 缺点:非关系型,不支持SQL,数据类型单一(字符串,无类型),之支持单 ...

  10. 解决Mac上安装mysqlclient的错误

       要想使用python操作mysql,那么就需要安装python操作数据库的驱动,由于mysqldb不支持python3,我选择安装mysqlclient, 命令行输入:pip3 install  ...