上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢。问题的关键就是那个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. Unity3D的断点调试功能

    断点调试功能可谓是程序员必备的功能了.Unity3D支持编写js和c#脚本,但很多人可能不知道,其实Unity3D也能对程序进行断点调 试的.不过这个断点调试功能只限于使用Unity3D自带的Mono ...

  2. 转:SQL 操作结果集 -并集、差集、交集、结果集排序

    为了配合测试,特地建了两个表,并且添加了一些测试数据,其中重复记录为东吴的人物. 表:Person_1魏国人物 表:Person_2蜀国人物 A.Union形成并集 Union可以对两个或多个结果集进 ...

  3. iOS oc 检测手机移动网络和wifi是否开启

    利用Reachability的的一个方法currentReachabilityStatus 获取枚举类型值判断是否为2即可,不是2就不是WiFi. enum {        // DDG Netwo ...

  4. 10.纯 CSS 创作一个同心圆弧旋转 loader 特效

    原文地址:https://segmentfault.com/a/1190000014682999 想到了扇形:正方形 ->border-radius: 50%; ->取四份中的任意一份. ...

  5. mysql source 命令导入不了sql!

    sql文件也是正常, 为什么就是导入不了呢?? 后面才发现,可能是编码被notepad++ 修改了—— 一看发现是UTF-8 无BOM,改回UTF-8格式编码 就正常了!! 虽然看到的都是正常汉字, ...

  6. hive基础操作

    hive --version  查看hive的版本 hive -S -e "set" | grep auto  ##在shell下可以查找属性的状态.小技巧.

  7. 清除linux服务器缓存 clean.sh

    #!/bin/sh#根据输入参数创建后台进程的日志名称#FileName: createNohupPhpForbak.sh #export JAVA_HOME=/root/lib/jdk1.7.0_7 ...

  8. 如何禁用Firefox,chrome浏览器“不安全密码警告”

    在任何HTTP页面中,一个全新的“不安全密码警告”将会在用户点击表单时直接出现在登陆框的下方,强行保证所有用户都能看到“此链接不安全,你的个人利益将受到损害”等字眼,同时整个页面也会收到损坏的挂锁图标 ...

  9. Redis简单生产者消费者

    注意:redis客户端执行是单线程的,不能将客户端放在外面,内部执行使用多线程的方式. // 创建生产端连接 final Jedis jedisProducter = new Jedis(R_HOST ...

  10. ABAP-多线程处理

    *&---------------------------------------------------------------------* *& Report ZRICO_TES ...