`

pushlet初次使用心得

 
阅读更多
最新写项目遇到一个功能,大概需求是用户a 发起任务给用户b,用户b及时提示告知。经过寻找资料,最终考虑使用pushlet。第一次使用先从简单学起,下面写一下初次使用心得:
pushlet百度百科解释: 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。
工作原理:这位仁兄总结的不错:http://tomyz0223.iteye.com/blog/660738;
下面是我使用的步骤:
首先需要一个jar和一个js文件分别是:
ajax-pushlet-client.js
pushlet.jar

其次配置文件部分:
web.xml部分:
 <!-- pushlet -->
	<servlet>
		<servlet-name>pushlet</servlet-name>
		<servlet-class>nl.justobjects.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.properties 部分:
#
# Pushlet configuration.
# Place this file in the CLASSPATH (e.g. WEB-INF/classes) or directly under WEB-INF.
#
# $Id: pushlet.properties,v 1.13 2007/12/07 12:57:40 justb Exp $
#

#
#
#
config.version=1.0.2

#
# CLASS FACTORY SPECIFICATION
#
# Change these if you want to override any of the core classes
# within the Pushlet framework with your own custom classes.
#
# Examples:
# - custom SessionManager for authorisation
# - maintain lists of active subjects (topics)
# - send events on subscription
# - plug in custom logging like log4j
# Note that you must maintain the semantics of each class !
# Below are the default properties for the core classes.
controller.class=nl.justobjects.pushlet.core.Controller
dispatcher.class=nl.justobjects.pushlet.core.Dispatcher
logger.class=nl.justobjects.pushlet.util.Log4jLogger
# logger.class=nl.justobjects.pushlet.util.DefaultLogger
sessionmanager.class=nl.justobjects.pushlet.core.SessionManager
session.class=nl.justobjects.pushlet.core.Session
subscriber.class=nl.justobjects.pushlet.core.Subscriber
subscription.class=nl.justobjects.pushlet.core.Subscription
sessionmanager.class=com.cisoft.pushlet.MySessionManager
 
# sessionmanager.maxsessions=200

#
# DISPATCHER
#


# TODO: allow properties to be maintained in
# a user dir
# config.redirect=/etc/pushlet.properties

#
# LOGGING
#

# log level (trace(6) debug(5) info (4), warn(3), error(2), fatal(1))
# default is info(4)
log.level=4

#
# LOCAL EVENT SOURCES
#

# should local sources be loaded ?
sources.activate=true

#
# SESSION
#


# algoritm to generate session key:
# values: "randomstring" (default) or "uuid".
# session.id.generation=uuid
session.id.generation=randomstring

# length of generated session key when using "randomstring" generation
session.id.size=10

# Overall session lease time in minutes
# Mainly used for clients that do not perform
# listening, e.g. when publishing only.
session.timeout.mins=5

#
# EVENT QUEUE
#
# Properties for per-client data event queue

# Size for
queue.size=24
queue.read.timeout.millis=20000
queue.write.timeout.millis=20

#
# LISTENING MODE
#

# You may force all clients to use pull mode
# for scalability
listen.force.pull.all=false

#
# Comma-separated list of User Agent substrings.
# Force these browsers to use pull mode, since they
# don't support JS streaming, matching is done using
# String.indexOf() with lowercased agent strings
# use multiple criteria with &.
#
listen.force.pull.agents=safari

#
# PULL MODE
#

# time server should wait on refresing pull client
pull.refresh.timeout.millis=45000

# minimum/maximum wait time client should wait before refreshing
# server provides a random time between these values
pull.refresh.wait.min.millis=2000
pull.refresh.wait.max.millis=6000

#
# POLL MODE
#

# time server should wait on refresing poll client
poll.refresh.timeout.millis=60000

# minimum/maximum wait time client should wait before refreshing
# server provides a random time between these values
poll.refresh.wait.min.millis=6000
poll.refresh.wait.max.millis=10000

sources.properties部分:
# 
# Properties file for EventSource objects to be instantiated.
#
# Place this file in the CLASSPATH (e.g. WEB-INF/classes) or directly under WEB-INF.
#
# $Id: sources.properties,v 1.2 2007/11/10 14:12:16 justb Exp $
#
# Each EventSource is defined as <key>=<classname>
# 1. <key> should be unique within this file but may be any name
# 2. <classname> is the full class name
#
#
# Define Pull Sources here. These classes must be derived from
# nl.justobjects.pushlet.core.EventPullSource
# Inner classes are separated with a $ sign from the outer class. 
source1=nl.justobjects.pushlet.test.TestEventPullSources$TemperatureEventPullSource
source2=nl.justobjects.pushlet.test.TestEventPullSources$SystemStatusEventPullSource
source3=nl.justobjects.pushlet.test.TestEventPullSources$PushletStatusEventPullSource
source4=nl.justobjects.pushlet.test.TestEventPullSources$AEXStocksEventPullSource
source5=nl.justobjects.pushlet.test.TestEventPullSources$WebPresentationEventPullSource
source6=nl.justobjects.pushlet.test.TestEventPullSources$PingEventPullSource
#source7=com.cisoft.pushlet.PushletUtils$TaskPushlet
#source1=com.cisoft.pushlet.MyPushletSource$MySource1


# TO BE DONE IN NEXT VERSION
# define Push Sources here. These must implement the interface
# nl.justobjects.pushlet.core.EventSource




最后是java代码部分:
package com.cisoft.pushlet;

import java.io.Serializable;

import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.EventPullSource;

public class MyPushletSource implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;


		 public static class MySource1 extends EventPullSource { 
		
	        @Override 
	        protected long getSleepTime() { 
                 //定时 1秒向客户端 推送一次
	            return 1000;   
		    } 
	        @Override 
	        protected Event pullEvent() { 
	            Event event =Event.createDataEvent("myevent1"); 
	            event.setField("key1","my_value1"); 
	          
	            return event;  
	        } 
		 } 


}



前台页面部分:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/pushlet/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>

</body>
</html>


最后 启动tomcat,在浏览器访问jsp页面就可以看到一个定时为1秒钟推送的结果啦!当然这里是很简单的使用pushlet,离我那个需求还差一点,今日太晚了,明天继续总结!
分享到:
评论

相关推荐

    pushlet 之 Pushlet使用手把手实例

    【Pushlet 使用手把手实例详解】 Pushlet 是一个开源的、基于Java的实时信息发布系统,它采用推送技术(Push Technology)实现服务器向客户端实时发送数据,而无需客户端频繁发起请求。这种技术在实时性要求高的...

    pushlet使用说明(包括中文乱码)

    在使用 Pushlet 进行部署时,以下是一些关键步骤: 1. **下载 Pushlet**:首先,你需要从官方网站获取 Pushlet 的最新版本,例如文中提到的 pushlet-2.0.4 版本。 2. **创建 Web 项目**:在 IDE(如 MyEclipse)中...

    pushlet

    3. **事件驱动**:Pushlet使用事件驱动的架构,当服务器端有新的数据可用时,会触发事件并进行推送。 4. **兼容性**:可能支持多种操作系统和Web服务器,以适应不同的部署环境。 5. **API**:提供一套API供开发者...

    pushlet jar包下载

    服务器推 pushlet 服务器推 pushlet 服务器推 pushlet 服务器推 pushlet

    服务器推送pushlet讲解

    这个名为"pushlet-record.txt"的文件可能包含了Pushlet框架的使用记录、日志信息或者是一些示例代码。分析这个文件可以帮助你更好地理解和使用Pushlet框架,例如,你可以找到服务器如何处理推送事件,客户端如何建立...

    使用Pushlet来实现服务器端向客户端推送信息

    使用Pushlet来实现服务器端向客户端推送信息

    使用Ext Pushlet 实现的点对点聊天功能最新

    前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, 显示好友ID的区域 ...

    pushlet简单配置应用

    5. **客户端JavaScript使用**:在HTML页面中,你需要引入`ajax-pushlet-client.js`这个客户端JavaScript库。然后,通过调用`PL._init()`初始化Pushlet,`PL.joinListen('/pushlet/test')`订阅特定的主题,例如'/...

    pushlet.jar 和示例工程

    示例工程则提供了一个快速入门的起点,通过实际运行和调试,开发者可以快速掌握Pushlet的使用方法。 总的来说,Pushlet框架是实现Web应用中服务器主动推送消息的一个强大工具,尤其适用于需要实时交互的场景。通过...

    pushlet服务器推技术例子

    【Pushlet服务器推技术】是一种实时通信技术,主要用于构建...在压缩包文件“pushlet”中,可能包含了实现Pushlet技术的源代码、配置文件和示例应用,供开发者学习和参考,以便在自己的项目中集成和使用Pushlet服务。

    使用Ext Pushlet 实现的点对点聊天功能

    前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, 显示好友ID的区域 ...

    PushLet实例,可直接运行

    5. **文档**:可能包含简单的使用指南或API文档,帮助开发者理解如何部署和使用PushLet实例。 使用这个实例,开发者可以学习如何设置PushLet服务器,创建推送通道,以及在客户端处理推送的消息。这对于学习和实践...

    pushlet实现简单的用户聊天

    这通常涉及到创建一个持久的HTTP连接,使用WebSocket或Comet技术(Pushlet使用的是Comet)。 3. **消息处理**:在服务器端,你需要创建一个处理聊天消息的逻辑,包括接收新消息、存储消息、以及将消息推送给正确的...

    pushlet 和comet 资料介绍

    在客户端,Pushlet通常使用IFrame和JavaScript来创建一个持久的连接,使得服务器能够向浏览器发送数据。具体来说,客户端首先通过`p_embed()`函数在页面中嵌入一个IFrame,这个IFrame用于与服务器进行通信。IFrame...

    pushlet文档和项目

    需要注意的是,Pushlet项目是相对较早的实时通信解决方案,虽然它在当时是一个创新的解决方案,但随着WebSocket等现代技术的出现,Pushlet的使用已经逐渐减少。WebSocket提供了更高效、更稳定的双向通信方式,而且...

    Pushlet简单示例测试

    在Web应用中,Pushlet能够显著提高用户体验,因为它减少了延迟并优化了服务器资源的使用。本示例测试将帮助我们了解如何在实际项目中运用Pushlet。 首先,我们要理解Pushlet的基本工作原理。Pushlet使用了HTTP长...

    pushlet例子

    Pushlet服务器使用Servlet容器(如Tomcat)运行,处理来自客户端的连接,并负责推送数据。Pushlet客户端通常是一个JavaScript脚本,它在用户浏览器中运行,用于建立与服务器的连接并接收推送的数据。 1. **Pushlet...

    comet 框架 之 pushlet

    在pushlet-2.0.3这个压缩包中,可能包含了Pushlet框架的源代码、文档、示例代码和配置文件等,用于帮助开发者理解和使用Pushlet。开发者可以通过阅读源码了解其工作原理,参考示例快速入门,通过配置文件定制Pushlet...

    pushlet实例以及jar

    标题中的“pushlet实例以及jar”表明我们即将讨论的是一个基于Pushlet技术的示例项目,其中包含了必要...通过这个实例和提供的jar文件,开发者可以快速掌握Pushlet的使用,从而在自己的项目中实现高效的消息推送功能。

    Pushlet的Ajax-pushlet-client.js分析

    `_doRequest(anEvent, aQuery)`是发送请求的关键,它根据当前状态和事件决定是否发起请求,同时使用回调函数`_onResponse`处理响应。`_getWebRoot`方法获取项目根目录,确保请求URL的正确性。`_getXML`方法则负责...

Global site tag (gtag.js) - Google Analytics