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代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <servlet>
  8. <servlet-name>pushlet</servlet-name>
  9. <servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
  10. <load-on-startup>3</load-on-startup>
  11. </servlet>
  12. <servlet-mapping>
  13. <servlet-name>pushlet</servlet-name>
  14. <url-pattern>/pushlet.srv</url-pattern>
  15. </servlet-mapping>
  16.  
  17. <welcome-file-list>
  18. <welcome-file>index.jsp</welcome-file>
  19. </welcome-file-list>
  20. </web-app>

注意触发pushlet这个servlet的条件是请求pushlet.srv。
接下来就是自定义推送源,MyPushSource.java代码如下:

  1. package com.mysrc;
  2.  
  3. import java.io.Serializable;
  4. import nl.justobjects.pushlet.core.Event;
  5. import nl.justobjects.pushlet.core.EventPullSource;
  6.  
  7. public class MyPushSource implements Serializable {
  8. public static class MySource1 extends EventPullSource {
  9. @Override
  10. protected long getSleepTime() {
  11. return 1000;
  12. }
  13. @Override
  14. protected Event pullEvent() {
  15. Event event =Event.createDataEvent("myevent1");
  16. event.setField("key1","my_value1");
  17. return event;
  18. }
  19. }
  20. }

每隔一秒钟就向订阅了myevent1的所有前端页面推送信息,这里是一个键值对。
然后需要在sources.properties声明该源(该文件现在只有这一行内容):
source1=com.mysrc.MyPushSource$MySource1
前台页面test.html代码如下:

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="ajax-pushlet-client.js"></script>
  4. <script type="text/javascript">
  5. PL._init();
  6. PL.joinListen('myevent1');
  7. function onData(event) {
  8. alert(event.get("key1"));
  9. }
  10. </script>
  11. </head>
  12. <body>
  13. This is pushlet test page....<br>
  14. </body>
  15. </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的。这儿咋们自己换成服务器的地址就可以了。

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

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

    上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢.问题的关键就是那个SessionID,Push ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. spring boot metrics信息推送开发

    上一篇文章是关于 “spring boot +RabbitMQ +InfluxDB+Grafara监控实践” 主要讲spring boot应用新能监控信息的收集方案实践 实践是hystrix信息推送的 ...

  9. php 微信客服信息推送失败 微信重复推送客服消息 40001 45047

    /*** * 微信客服发送信息 * 微信客服信息推送失败 微信重复推送客服消息 40001 45047 * 递归提交到微信 直到提交成功 * @param $openid * @param int $ ...

随机推荐

  1. Github Page 搜索工具

    轮子 今天造了一个轮子 -- Github Page搜索工具 https://man-ing.com/github. 什么是Github Page 直接从GitHub存储库托管.只需编辑,推送,更改即 ...

  2. arm-linux-ld:u-boot.lds:1: ignoring invalid character `#' in expression

    在裁剪uboot的时候出现下面错误: LDS u-boot.lds LD u-boot arm-linux-: ignoring invalid character `#' in expression ...

  3. 《DSP using MATLAB》Problem 7.12

    阻带衰减50dB,我们选Hamming窗 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  4. rabbitmq management advance lesson

    rabbitmq management advance management install rabbitmq-plugins enable rabbitmq_management visit : h ...

  5. 在windows上使用ssh秘钥连接git服务器

    git部署在centos7上 安装好git后,新建一个用户test(注意要加入git用户组)配置ssh秘钥登录,我的另一篇博客有写配置步骤 重点的地方是在windows系统上使用秘钥登录git服务器 ...

  6. zombodb 配置设置

    主要是关于es 集群地址以及分片,复制副本的配置,配置主要在postgresql.conf,当然我们可以在函数中指定 postgresql.conf 级别的配置 es 配置 格式 zdb.defaul ...

  7. Javascript 将一个句子中的单词首字母转成大写

    Javascript 将一个句子中的单词首字母转成大写 先上代码 function titleCase(str) { str = str.toLowerCase().split(" &quo ...

  8. Delphi IdHTTP1下载文件防止假死 (

    在Form1中添加控件:两个Indy控件:IdAntiFreeze1,IdHTTP1;一个按钮 :Button1;一个进度条 :ProgressBar1 显示下载速度 procedure TForm1 ...

  9. tinycc update VERSION to 0.9.27

    TinyCC全称为Tiny C Compiler, 是微型c编译器,可在linux/win/平台上编译使用. 在用代码里面使用tcc当脚本,性能比lua还快,目前已有网游服务端使用TCC脚本提高性能. ...

  10. springboot整合mybatis之注解方式

    1. 创建maven项目,工程目录如下图 2. 在pom.xml文件中添加mybatis依赖. 3. 创建实体类,并生成construct方法,getter和setter方法.同时在数据库中创建对应的 ...