`
yjdingkai
  • 浏览: 18782 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用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>

 注意触发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;  
        } 
	 } 
}

 每隔一秒钟就向订阅了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>

 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页面就可以了。

分享到:
评论
4 楼 leixm 2012-11-22  
Reset 写道
还是websocket吧

人家客户还是用的IE6,
3 楼 Reset 2012-10-29  
还是websocket吧
2 楼 leixm 2012-09-21  
Reset 写道
ajax-pushlet-client.js是轮询的 只有js-pushlet-client.js才是长连接的 坑爹了。。。



是,用js-pushlet-client.js有个问题就是页面会有刷新的状态,这个看起很不爽啊
1 楼 Reset 2012-08-24  
ajax-pushlet-client.js是轮询的 只有js-pushlet-client.js才是长连接的 坑爹了。。。

相关推荐

    Pushlet后台往jsp前台推送消息实例

    在这个"Pushlet后台往jsp前台推送消息实例"中,我们将深入探讨Pushlet的工作原理以及如何在实际项目中运用。 Pushlet是Java开发的一个开源项目,它基于Apache的jakarta-cocoon项目,利用了Servlet和Continuation...

    服务器推送pushlet讲解

    Pushlet是基于Comet技术的一种实现,它为Java开发者提供了一种高效的服务器推送解决方案。 一、Comet技术 Comet是一种允许服务器长时间保持HTTP连接的技术,它打破了传统的Web应用模型,即客户端发起请求,服务器...

    pushlet实现服务器端向客户端推送消息总结

    Pushlet 是一种基于 Java 的实时通信框架,用于实现在服务器端向客户端主动推送消息的功能,而无需客户端不断轮询。这种技术在构建实时应用程序,如聊天室、实时股票更新或在线游戏等场景中非常有用。以下是关于 ...

    通过推送机制(Tomcat comet,pushlet)实现进度条

    标题中的“通过推送机制(Tomcat comet,pushlet)实现进度条”涉及到的是Web应用中的一种实时通信技术,主要用于提供动态更新和用户交互。这里主要介绍Tomcat的Comet和Pushlet技术,以及如何利用它们来创建一个...

    pushlet+extjs实现聊天组

    2. **实时推送**:Pushlet负责后台的数据推送,一旦有新的聊天消息,服务器会立即通过已建立的长连接将消息推送给相关的客户端。 3. **多用户互动**:通过ExtJS的数据管理,可以轻松处理多个用户之间的交互,如添加...

    PUSHLET即时通讯工程实例

    PUSHLET是一种基于Java技术实现的即时通讯系统,它允许服务器主动向客户端推送数据,而无需客户端持续轮询请求。这种技术在实时性要求高的应用中非常常见,如在线聊天、股票交易、游戏等场景。本实例将展示如何在...

    pushlet聊天工具编辑中。。。。

    "Pushlet聊天工具"是一个基于特定技术实现的通信软件,主要功能是提供实时的信息传递服务。根据提供的标签“源码”和“工具”,我们可以推断这个压缩包可能包含了一个聊天工具的源代码,用于帮助开发者理解和学习...

    pushlet 资料

    总的来说,Pushlet是早期实现服务器向客户端实时推送数据的一种解决方案,虽然现在可能已经被其他技术所取代,但它在当时的Web开发中起到了重要的作用,对于理解实时通信机制仍然具有一定的学习价值。

    dwr服务器推技术实例

    `TestPushlet`则是DWR中的一个推送服务示例,它是基于Pushlet框架的一个组件。Pushlet是一种轻量级的事件驱动模型,允许服务器将数据“推送”到客户端。在DWR中,Pushlet可以创建一个持久的HTTP连接,保持客户端和...

Global site tag (gtag.js) - Google Analytics