Pushlet实现后台信息推送(二)
上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢。问题的关键就是那个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实现后台信息推送(二)的更多相关文章
- Pushlet实现后台信息推送(一)
Pushlet是使用较多的后台向前台推送信息的工具.前台订阅某个感兴趣的事件joinListen,触发后台的Pushlet的servlet,为该请求会话建立session,默认这个sessionID是 ...
- iOS刚进入后台接受推送、打开推送调转到相应的界面
刚进入后台的时候消息处理时候我用了本地推送!可以看我前边写的博客,怎么处理刚进入后台接收推送的案例,链接 /** 注释:打开推送的三种方式:-peter 1.apns的时候,结束进程退出后台:启动的时 ...
- 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能
什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...
- 李洪强iOS之集成极光推送二iOS 证书 设置指南
李洪强iOS之集成极光推送二iOS 证书 设置指南 创建应用程序ID 登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 在 iOS Provisioning ...
- EasyPusher手机直播推送是如何实现后台直播推送的
本文由EasyDarwin开源团队成员John提供:http://blog.csdn.net/jyt0551/article/details/52276062 EasyPusher Android是使 ...
- PHP Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...
- Ruby Web实时消息后台服务器推送技术---GoEasy
越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...
- Android消息推送(二)--基于MQTT协议实现的推送功能
国内的Android设备,不能稳定的使用Google GCM(Google Cloud Messageing)消息推送服务. 1. 国内的Android设备,基本上从操作系统底层开始就去掉了Googl ...
- JAVA Web实时消息后台服务器推送技术---GoEasy
---恢复内容开始--- 越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...
随机推荐
- java 怎样向一个已存在的文件中添加内容
如果想向某个文件最后添加内容,可使用FileWriter fw = new FileWriter("log.txt",true);在创建FileWriter时加个true就可以了. ...
- gojs 破解版
a.Hv=d[w.Kg("7eba17a4ca3b1a8346")][w.Kg("78a118b7")](d,w.pm,4,4);a.Hv= function( ...
- hping安装过程
转载: http://www.safecdn.cn/website-announcement/2018/12/hping-install/97.html Hping的主要功能有: 测试防火墙实用的 ...
- zabbix使用ICMP Ping模版实现对客户端网络状态的监控,监控丢包率、响应时间
参考网站: https://www.cnblogs.com/saneri/p/6706578.html 使用fping报错注意事项: https://blog.csdn.net/oqqssh/arti ...
- Set和Map数据
es6新的数据结构 1.Set:构造函数 const s = new Set ([1,2,3]); console.log(s)//Set(3){1,2,3};[...s];//[1,2,3]cons ...
- java的原子类 AtomicInteger 实现原理是什么?
采用硬件提供原子操作指令实现的,即CAS.每次调用都会先判断预期的值是否符合,才进行写操作,保证数据安全. CAS机制 CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换. ...
- HTTP 错误 403.6 - Forbidden 解决方案
MSDN 的解决方案 原因 1 Ip 安全的 XML 元素的allowUnlisted属性的值为 false.此外,客户端计算机的 IP 地址不在ip 安全XML 元素之下 IP 地址的列表中.IIS ...
- webvtt字幕转srt字幕的python程序(附改名程序)
最近写了两个比较简单的python程序,原有都是由于看公开课感觉比较费劲,一个是下载的视频无用的名字太长,另一个就是下载的vtt字幕播放器不识别,写了一个vtt转换成str字幕格式的文件 vtt to ...
- UML类图实例分析
登录模块 某基于C/S的即时聊天系统登录模块功能描述如下: 用户通过登录界面(LoginForm)输入账号和密码,系统将输入的账号和密码与存储在数据库(User)表中的用户信息进行比较,验证用户输入是 ...
- A New Year, A New Accent!
A New Year, A New Accent! Share Tweet Share Happy New Year! Does your list of resolutions include i ...