pushlet

Pushlet定点推送消息<一>

我只是一个虾纸丫 提交于 2020-03-16 11:02:33
上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢。问题的关键就是那个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下。工程结构如下: FirPush.java是自己写的一个触发推送动作的类,它是一个servlet,请求该servlet就触发向特定的用户推送信息的动作(当然,怎么触发推送动作还有很多种形式)。 web.xml代码如下: Xml代码 < span style = "font-size: x-small

学习Pushlet(二):看源码了解pushlet

雨燕双飞 提交于 2020-03-12 04:01:56
首先我们需要去了解一下pushlet的代码,从而进行我们自己的自定义需求,首先我们找到我们写的后台服务,有两个方法一个设置睡眠时间和生成事件,那么到底有什么用呢,哪里用到了呢。我们将从官网下载的源码也放入到项目中去,我们进入到HelloWorldPlushlet继承的EventPullSource类里面,原来它继承了Runnable,是个线程,那么查看run方法:发现这里用到了我们自定义的两个方法,通过设置的睡眠时间让线程睡眠,一个通过生成事件的方法生成事件并且发布出去,那么到这里我们大概明白了,原来pushlet后台是生成了一个线程,这个线程不断生成事件并且发布出去,然后睡眠,一直循环。这就是生产信息的那个线程。 /** * Main loop: sleep, generate event and publish. */ public void run() { Log.debug(getClass().getName() + ": starting..."); alive = true; while (alive) { try { Thread.sleep(getSleepTime()); // Stopped during sleep: end loop. if (!alive) { break; } // If passivated wait until we get //

【pushlet学习】具体实战

左心房为你撑大大i 提交于 2020-03-12 04:01:06
业务需求 : 1. 前端界面需要实时显示空调、照明等设备的状态, 如:空调电压、空调电流、光照强度等,这些量每一个称作一个测点; 2. 不同的用户登录系统后,用户只能看到自己设备的运行状态,而看不到其他人设备的运行状态; 3. 由于每个用户的设备类型、种类、个数等都不相同,因此每个用户需要查询测点也不相同; 4. 当多个用户同时登陆系统时,其实就是在多个浏览器上打开多个浏览界面,去查看自己设备运行状态, 即:多个浏览器上的多个界面对后台请求的测点是不同的,例如: 用户1:<测点1,测点2,测点3,测点4,.....>; 用户2:<测点21,测点22,测点23,测点24,.....>; 用户3:<测点31,测点32,测点33,测点34,.....>; 用户n:<测点n1,测点n2,测点n3,测点n4,.....>; 功能需求: 采用传统的“请求/响应”方式,很难达到前台界面实时显示最新数据,为达到实时显示最新数据,我们采用一种“服务器推”的 技术comet,而pushlet是“服务器推”技术的一种实现,这里我们采用pushlet技术来实现上述业务需求。 1. 假设后台的测点数据是实时变化的,且保存在HashMap中,即: HashMap<测点名,测点值>; 当测点值发生变化时,后台就会实时更新Hashmap中对应的测点值,即Hashmap中保存的始终是实时数据; 2.

学习Pushlet(一):下载及运行demo

点点圈 提交于 2020-03-12 04:00:45
  一、最近项目中要使用pushlet作为推送消息的技术框架,所以特地学习了一下。我们重点记录项目中的实际使用过程和解决问题的办法。首先需要了解的是,Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。表面上是服务器推,实现是还是客户端拉。这张原理图画的不错:   1.browser发送join命令到server,server产生唯一的ID给client端,用于标识这次会话的唯一性,Pushlet是用java.rmi.server.UID产生的唯一的标志会话的标志,此时server会把sessionID作为key,session对象作为value,存放到HashMap里面,然后通过response.getWriter().println()回调给browser   2.browser拿到sessionID,并发送listen命令,listen命令,有subject,提交给server,server首先验证Session HashMap里面有没有这个sessionID,验证通过后,回调给客户端listen_ack消息,同时开始把数据放入eventQueue中,并update给客户端

pushlet单播与多播

徘徊边缘 提交于 2019-12-30 02:53:45
近期要弄一个消息推送的功能,在网上找了非常多的关于pushlet的文章,尽管写的都非常具体,可是本人看了以后却总认为是模棱两可···不知道怎样下手,终于參考了这些文章中的一些内容,并结合官网的源码。做了自己的改动。 第一部分 改动的地方 首先改动了nl.justobjects.pushlet.core.Session,添加了even字段,添加了getEvent()方法,同一时候改动了create()方法,改动例如以下: // Copyright (c) 2000 Just Objects B.V. <just@justobjects.nl> // Distributable under LGPL license. See terms of license at gnu.org. package nl.justobjects.pushlet.core; import nl.justobjects.pushlet.util.Log; import nl.justobjects.pushlet.util.PushletException; /** * Represents client pushlet session state. * * @author Just van den Broecke - Just Objects © * @version $Id: Session.java

SSH集成Pushlet

感情迁移 提交于 2019-12-30 02:51:31
首先是需要的资源: 1)、pushlet.jar 2)、ajax-pushlet-client.js 第一步、web.xml配置servlet <servlet> <servlet-name>pushlet</servlet-name> <servlet-class>com.newgsn.tvmall.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> Pushlet类自定义类,继承自nl.justobjects.pushlet.servlet.Pushlet.java 第二步、创建自定义的Pushlet类 初始化pushlet,并注入applicationContext public class Pushlet extends nl.justobjects.pushlet.servlet.Pushlet { /** * */ private static final long serialVersionUID = 1L; public