使用Pushlet实现后台信息推送(一)
Pushlet是使用较多的后台向前台推送信息的工具。前台订阅某个感兴趣的事件joinListen,触发后台的Pushlet的servlet,为该请求会话建立session,默认这个sessionID是随机的java.rmi.server.UID(后面会介绍pushlet二次开发,改掉这个UID,以便可以自由控制向某一个特点前台推送信息)。之后前台会向后台发送refresh请求,后台返回给前台下一次发送refresh的时间间隔,如此循环,以便维持session会话,宏观上就实现了前后台之间的长连接。
这里首先列出最简单的后台利用PullSource周期性地向订阅了某事件的所有网页客户端推送信息。
下载最新版本的Pushlet。MyEclipse下建立一个web工程,我这里叫PushletTest,将pushlet.jar加入引用路径,pushlet.properties和sources.properties放入WebRoot/WEB-INF下,工程结构如下图:
在web.xml中添加pushlet的servlet的声明,让这个servlet在服务器启动时就启动(load-on-startup为正数),web.xml代码如下:
- <?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-mapping>
- <servlet-name>pushlet</servlet-name>
- <url-pattern>/pushlet.srv</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
<?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-mapping><servlet-name>pushlet</servlet-name><url-pattern>/pushlet.srv</url-pattern></servlet-mapping> <welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list> </web-app>
注意触发pushlet这个servlet的条件是请求pushlet.srv。
接下来就是自定义推送源,MyPushSource.java代码如下:
- package com.mysrc;
- import java.io.Serializable;
- import nl.justobjects.pushlet.core.Event;
- import nl.justobjects.pushlet.core.EventPullSource;
- public class MyPushSource implements Serializable {
- public static class MySource1 extends EventPullSource {
- @Override
- protected long getSleepTime() {
- return 1000;
- }
- @Override
- protected Event pullEvent() {
- Event event =Event.createDataEvent("myevent1");
- event.setField("key1","my_value1");
- return event;
- }
- }
- }
package com.mysrc;import java.io.Serializable;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.EventPullSource;public class MyPushSource implements Serializable {public static class MySource1 extends EventPullSource { @Override protected long getSleepTime() { return 1000; } @Override protected Event pullEvent() { Event event =Event.createDataEvent("myevent1"); event.setField("key1","my_value1"); return event; } }
}
每隔一秒钟就向订阅了myevent1的所有前端页面推送信息,这里是一个键值对。
然后需要在sources.properties声明该源(该文件现在只有这一行内容):
source1=com.mysrc.MyPushSource$MySource1
前台页面test.html代码如下:
- <html>
- <head>
- <script type="text/javascript" src="ajax-pushlet-client.js"></script>
- <script type="text/javascript">
- PL._init();
- PL.joinListen('myevent1');
- function onData(event) {
- alert(event.get("key1"));
- }
- </script>
- </head>
- <body>
- This is pushlet test page....<br>
- </body>
- </html>
<html><head><script type="text/javascript" src="ajax-pushlet-client.js"></script> <script type="text/javascript"> PL._init(); PL.joinListen('myevent1'); function onData(event) { alert(event.get("key1")); }</script> </head><body>This is pushlet test page....<br></body>
</html>
PL是在ajax-pushlet-client.js中定义的。好了,将工程部署到Tomcat,启动,请求test.hmtl,就能看到my_value1的alert的显示了。
需要说明的是,也可以将test.html和ajax-pushlet-client.js放在本地,不用请求服务器上的,因为这儿的关键是触发服务器上的pushlet那个servlet,之后能进行心跳同步。打开ajax-pushlet-client.js,找到PL.pushletURL = PL._getWebRoot() + 'pushlet.srv';这一行,这儿PL._getWebRoot() 是通过ajax-pushlet-client.js在服务器上的路径得到url的。这儿咋们自己换成服务器的地址就可以了。我的为:PL.pushletURL = "http://192.168.1.154:7087/PushletTest/" + 'pushlet.srv';
OK,然后用浏览器打开这个本地的test.html页面就可以了。
使用Pushlet实现后台信息推送(一)相关推荐
- 使用Pushlet实现后台信息推送(二)
上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢.问题的关键就是那个SessionID,Push ...
- pushlet java_Pushlet实现后台信息推送(一)
Pushlet是使用较多的后台向前台推送信息的工具.前台订阅某个感兴趣的事件joinListen,触发后台的Pushlet的servlet,为该请求会话建立session,默认这个sessionID是 ...
- 钉钉 php 推送,微信模板推送,钉钉信息推送
上午的时候看到有朋友需要微信推送,正好我也需要,之前一直用 Server 酱的,但是最近用不了,想找一个替代品,一开始准备选择钉钉,除了打卡,我很少使用钉钉,邮件提醒是备用方案,其实和 Server ...
- 微信开发3之php模板信息推送
模板信息推送:需要在后台开通了模板消息推送接口 PHP代码如下: <?php $appid="wxxxxxxxxxxxxxxxxxx"; //填写微信后台的appid $ap ...
- EasyPusher手机直播推送是如何实现后台直播推送的
本文由EasyDarwin开源团队成员John提供:http://blog.csdn.net/jyt0551/article/details/52276062 EasyPusher Android是使 ...
- bmob云服务器信息推送,FAQ-Bmob后端云
Q: Bmob 平台是做什么的? A: Bmob 是多租户无模式的移动应用云服务,它可以让 android/IOS/WP 等移动开 发者无需掌握任何一门服务器开发语言(如 JAVA/PHP 等),将注 ...
- 【imessage群发苹果推信】[iMessageSuspic](Apple推送服务)使用信息推送服务
Apple信息推送服务(ApplePushNotificationservice), 由Apple根据官方新闻服务提供. 交货包括顶部,声音和Badgenumber比例指南(),应用程序可以在任何条件 ...
- uniapp之unipush安卓app信息推送
第一步,uniapp 官网查找推送 uni-app官网 介绍业务.开通流程,请务必仔细阅读 UniPush使用指南 - DCloud问答 第二步,unipush相关链接 开通的unipush是封装了个 ...
- ASP.NET Core 使用SignalR后台实时推送数据给Echarts展示图表
什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...
最新文章
- 使用微信开发者工具创建小程序项目
- 把 Bug 晾几天就能解决了!!! | 每日趣闻
- C++知识点15——使用C++标准库(IO流)
- leetcode287. Find the Duplicate Number
- activemq broker集群_17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ
- Python计算机视觉:第九章 图像分割
- 数据解析系统中需改进的几点
- 每周论文清单:知识图谱,文本匹配,图像翻译,视频对象分割
- 缓存工具类MyCacheUtil
- PHP 给页面内容中的所有图片添加特定链接
- 三年Java开发,java基础常问面试题
- 点击按钮无法触发ajax_前端 | Ajax 入门与实战
- linux环境搭建pypi源,使用pypi-server搭建简单的PyPI源
- 机器视觉:光源专业词汇中英文详解
- 如何在Android按钮上以编程方式设置drawableLeft?
- esp8266对接天猫精灵 微信控制
- Excel图表美化—表格美化
- Day16:C++之STL应用篇(推箱子cxk限定)
- C语言控制和鼠标键盘 (windows环境)
- 剪辑视频怎么学?手把手教你自学视频剪辑