最新写项目遇到一个功能,大概需求是用户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 是一个开源的、基于Java的实时信息发布系统,它采用推送技术(Push Technology)实现服务器向客户端实时发送数据,而无需客户端频繁发起请求。这种技术在实时性要求高的...
在使用 Pushlet 进行部署时,以下是一些关键步骤: 1. **下载 Pushlet**:首先,你需要从官方网站获取 Pushlet 的最新版本,例如文中提到的 pushlet-2.0.4 版本。 2. **创建 Web 项目**:在 IDE(如 MyEclipse)中...
3. **事件驱动**:Pushlet使用事件驱动的架构,当服务器端有新的数据可用时,会触发事件并进行推送。 4. **兼容性**:可能支持多种操作系统和Web服务器,以适应不同的部署环境。 5. **API**:提供一套API供开发者...
服务器推 pushlet 服务器推 pushlet 服务器推 pushlet 服务器推 pushlet
这个名为"pushlet-record.txt"的文件可能包含了Pushlet框架的使用记录、日志信息或者是一些示例代码。分析这个文件可以帮助你更好地理解和使用Pushlet框架,例如,你可以找到服务器如何处理推送事件,客户端如何建立...
使用Pushlet来实现服务器端向客户端推送信息
前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, 显示好友ID的区域 ...
5. **客户端JavaScript使用**:在HTML页面中,你需要引入`ajax-pushlet-client.js`这个客户端JavaScript库。然后,通过调用`PL._init()`初始化Pushlet,`PL.joinListen('/pushlet/test')`订阅特定的主题,例如'/...
示例工程则提供了一个快速入门的起点,通过实际运行和调试,开发者可以快速掌握Pushlet的使用方法。 总的来说,Pushlet框架是实现Web应用中服务器主动推送消息的一个强大工具,尤其适用于需要实时交互的场景。通过...
【Pushlet服务器推技术】是一种实时通信技术,主要用于构建...在压缩包文件“pushlet”中,可能包含了实现Pushlet技术的源代码、配置文件和示例应用,供开发者学习和参考,以便在自己的项目中集成和使用Pushlet服务。
前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='piccUtil'; // 发送消息的地址 Ext.fcontent='fcontent'; // 显示窗口或有新消息时, 显示好友ID的区域 ...
5. **文档**:可能包含简单的使用指南或API文档,帮助开发者理解如何部署和使用PushLet实例。 使用这个实例,开发者可以学习如何设置PushLet服务器,创建推送通道,以及在客户端处理推送的消息。这对于学习和实践...
这通常涉及到创建一个持久的HTTP连接,使用WebSocket或Comet技术(Pushlet使用的是Comet)。 3. **消息处理**:在服务器端,你需要创建一个处理聊天消息的逻辑,包括接收新消息、存储消息、以及将消息推送给正确的...
在客户端,Pushlet通常使用IFrame和JavaScript来创建一个持久的连接,使得服务器能够向浏览器发送数据。具体来说,客户端首先通过`p_embed()`函数在页面中嵌入一个IFrame,这个IFrame用于与服务器进行通信。IFrame...
需要注意的是,Pushlet项目是相对较早的实时通信解决方案,虽然它在当时是一个创新的解决方案,但随着WebSocket等现代技术的出现,Pushlet的使用已经逐渐减少。WebSocket提供了更高效、更稳定的双向通信方式,而且...
在Web应用中,Pushlet能够显著提高用户体验,因为它减少了延迟并优化了服务器资源的使用。本示例测试将帮助我们了解如何在实际项目中运用Pushlet。 首先,我们要理解Pushlet的基本工作原理。Pushlet使用了HTTP长...
Pushlet服务器使用Servlet容器(如Tomcat)运行,处理来自客户端的连接,并负责推送数据。Pushlet客户端通常是一个JavaScript脚本,它在用户浏览器中运行,用于建立与服务器的连接并接收推送的数据。 1. **Pushlet...
在pushlet-2.0.3这个压缩包中,可能包含了Pushlet框架的源代码、文档、示例代码和配置文件等,用于帮助开发者理解和使用Pushlet。开发者可以通过阅读源码了解其工作原理,参考示例快速入门,通过配置文件定制Pushlet...
标题中的“pushlet实例以及jar”表明我们即将讨论的是一个基于Pushlet技术的示例项目,其中包含了必要...通过这个实例和提供的jar文件,开发者可以快速掌握Pushlet的使用,从而在自己的项目中实现高效的消息推送功能。
`_doRequest(anEvent, aQuery)`是发送请求的关键,它根据当前状态和事件决定是否发起请求,同时使用回调函数`_onResponse`处理响应。`_getWebRoot`方法获取项目根目录,确保请求URL的正确性。`_getXML`方法则负责...