`
阅读更多
pushlet是comet的一种实现,而且是开源,其声 称能支持目前的web 服务器,于是就对其提供的服务器端以及客户端代码进行了一番研究,心得如下: 在要使用push的页面中通过执行p_embed()向当前页面添加用来与server通讯的iframe 。后台通讯的页面叫js_pushlet_js.html页面,在这个页面中包含两个frame:一个负责发送请求,也就是controlFrame,一 个负责接受请求,即listenFrame。

clientAdapter的作用:clientAdapter实际上是对response的一个封装,根据向 response中write不同的数据,可以分为不同的clientAdapter实现,比如BroswerAdapter就是为了处理浏览器发送的请 求。

在每次打开页面之后都要建立与后台的联系,这个一般都是通过js函数join来实现的,join会调用 js_push_client.js中的通用函数(p_join_listen)来做两件事: 第一个就是调用p_join,给用来通讯的iframe赋location.href值,让它去发送请求,接收请求的是 nl.justobjects.pushlet.servlet.Pushlet这个servlet。

并通过p_event=join告诉后台开始建立连接。在发送完请求之后,后台会response回来一段新的js 代码,处理方法是:String nl.justobjects.pushlet.core.BrowserAdapter.event2JavaScript(Event event) throws IOException,里面的返回结果是:" ",后台在处理完join事件之后将结束response。

push()这个函数在 js_pushlet_net.html这个页面中,不过它还会调用js_pushlet_client.js库中的_push()函数,push函数会 根据server传回的参数(这些参数都是一些后台要调用的事件参数),最终我们会根据返回的参数执行相应的回调函数,这些回调函数在事件的应用html 应用页面中实现,比如ping.html页面,回调函数有:onData等。

第二件事就是调用p_listen再次向后台发送请求(由负责与后台通讯的iframe中另外一个子frame来处 理),不过此时需要后台执行的是listen事件,listen跟其他事件不同在于它先找到当前 session对应的订阅者(subscriber),然后调用subscriber的fetchEvent()方法,从订阅者的event queue中取出所有的event对象 ?在js_pushlet_client.js中有一个全局变量:pushletNet这个指的就是用来与后台通信的那个iframe对象,还有一个全局 的变量是pushletURI,这个指的是要请求的servlet url。

后台Event的处理机制:对Event的处理放在EventSource中,EventSource分两种:pull和push,目前主要是pull方 式(似乎有些与pushlet矛盾),EventSource有多个实现,这些实现会在source.properties中注册,然后由 EventSourceManager进行管理,EventSource同时会实现Runnable接口,即会用到多线程,在Servlet初始化的时候 通过启动EventSourceManager来启动多个EventSource线程。

由于pushlet采用的是发布/订阅模式,在将Event发送给客户端前,首先要找到所有的客户端对象,这个通过 一个pushlet自己定义的session(每一个连接到服务器的客户端会在服务器上注册一个 session来保存客户端信息,在每次发送请求的时候会带有一个sessionid来加以识别)来处理,然后从所有连接的客户端找到订阅了该event 的订阅者,这个是在Dispatcher的multicast()方法中进行的,在订阅者中有一个event queue对象,广播的event对象将保存到该queue中。

从queue中抓取event的过程则交给controllor完成。 前台需要连续发送请求?不需要,如果需要拼命的发送请求,就不叫comet了,前台只需要发送两个请求,一个是请求连接的join请求事件,一个是对后台 进行监听的listen事件,如果后台对应的数据发生了变化,则这个变化会反应到订阅者的event队列中,监听事件请求就是不断的读取订阅者的 event队列即可。response需要请求执行完成之后关闭吗?在第一个join事件请求是需要关闭的,listen事件请求则不需要。

如果客户端连接关闭了,后台如何知晓?在向response中write数据的时候抛出异常,后台就会知道可能是客户端已经关闭,这样该输出将结束 ?pushlet中如何与ajax结合使用?如果使用ajax的话,就是将iframe换成了xmlhttp,后台无变化,就是这么简单!
分享到:
评论
1 楼 shutaodream 2010-12-24  
前台是否可以向后台传参数,因为每个定阅的主题面要求返回的数据不同,根据页面传送的参数而定。

谢谢!
前台定阅主题代码:
p_join_listen('/system/test');

后台处理阅定将代码:
/**
* Produces an event related to the Dispatcher.getInstance(). status.
*/
static public class TestEventPullSource extends EventPullSource {
private int number = 0;

public long getSleepTime() {
return 2000;
}

public Event pullEvent() {
Event event = Event.createDataEvent("/system/test");
// p(Dispatcher.getInstance()..getStatus());
event.setField("nr", "" + (number++));
event.setField("time", "" + System.currentTimeMillis());
return event;
}

  }

相关推荐

    pushlet jar包下载

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

    pushlet简单配置应用

    Pushlet是一种基于Java的实时数据推送技术,由荷兰JustObjects公司开发。Pushlet库的核心功能是实现实时的服务器向客户端推送数据,而无需客户端频繁发起请求,这大大提高了网络应用的效率和用户体验。以下是对...

    pushlet实现简单的用户聊天

    在IT行业中,Pushlet是一种基于Java的推送技术,主要用于实现实时的数据传输,尤其是在Web应用中创建实时聊天、通知服务等功能。Pushlet是基于HTTP连接持久化的概念,它允许服务器主动向客户端推送数据,而无需...

    pushlet服务器推技术例子

    【Pushlet服务器推技术】是一种实时通信技术,主要用于构建能够实时推送信息的Web应用程序,比如聊天、股票更新、在线游戏等场景。Pushlet是基于Java的开源项目,它利用了HTTP的长连接特性,实现了服务器主动向...

    pushlet 之 Pushlet使用手把手实例

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

    服务器推送pushlet讲解

    Pushlet的核心概念包括Pushlet服务器、Pushlet客户端和Pushlet事件。 1. Pushlet服务器:这是Comet服务的实现,负责接收客户端连接并保持连接打开状态,直到有新的数据可推送到客户端。 2. Pushlet客户端:通常是一...

    pushlet.jar 和示例工程

    "pushlet.jar 和示例工程"是一个专注于实现服务器端向客户端主动推送消息的框架,它在Web开发领域中扮演着重要角色。Pushlet框架的设计旨在克服传统的HTTP协议中客户端请求、服务器响应的被动通信模式,转而采用一种...

    PushLet实例,可直接运行

    PushLet是一种基于Java的实时推送技术,用于在服务器和客户端之间进行双向通信,尤其是在Web应用中实现数据的即时更新。这个实例"PushLet实例,可直接运行"提供了一个完整的、可以直接执行的PushLet项目,包括必要的...

    Pushlet的Ajax-pushlet-client.js分析

    《Pushlet的Ajax-pushlet-client.js深度解析》 在当今的Web开发中,实时通信技术已经成为了一项不可或缺的技能,而Pushlet的Ajax-pushlet-client.js则是实现服务器“推”技术的重要工具。本文将深入剖析这个...

    Pushlet简单示例测试

    Pushlet是一种基于Java的实时数据推送技术,它允许服务器向客户端主动推送数据,而无需客户端持续不断地轮询请求。在Web应用中,Pushlet能够显著提高用户体验,因为它减少了延迟并优化了服务器资源的使用。本示例...

    comet 框架 之 pushlet

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

    pushlet 和comet 资料介绍

    Pushlet和Comet技术是Web服务器向浏览器推送数据的两种策略,主要用于实现实时的、双向的通信。这两种技术在传统的HTTP协议基础上进行了扩展,克服了HTTP请求-响应模型的限制,使得服务器能够主动向客户端推送数据,...

    pushlet文档和项目

    Pushlet是一种基于Java的推送技术框架,用于实现实时数据从服务器向客户端的推送。Pushlet项目是由Peter Mularien开发的,它提供了一个简单、轻量级的解决方案,允许服务器端主动向浏览器或其他客户端应用程序发送...

    pushlet实例以及jar

    标题中的“pushlet实例以及jar”表明我们即将讨论的是一个基于Pushlet技术的示例项目,其中包含了必要的jar文件。Pushlet是一种轻量级的、基于服务器推送(Server-Sent Events, SSE)技术,用于实现实时数据传输,...

    Pushlet点对点发送消息

    Pushlet是一种基于Java的实时通信框架,主要用于实现服务器向客户端推送数据,也就是所谓的“服务器推”技术。在传统的HTTP协议中,客户端需要不断发起请求来获取服务器的数据,而Pushlet则打破了这种模式,允许...

    pushlet框架做的小例子

    **Pushlet框架详解** Pushlet框架,又称为Java Pushlet,是一种基于Java的实时推送技术框架,由Marc Fleury创建并开源。Pushlet的核心概念是实现服务器向客户端的主动推送数据,而不是传统的HTTP请求-响应模式,即...

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

    Pushlet 是一个基于 Comet 技术的框架,用于实现在 Web 应用中服务器向客户端实时推送数据的功能。Comet 是一种反向 AJAX 技术,允许服务器在客户端请求未结束时保持连接开放,从而可以在有新数据时立即推送到客户端...

    pushlet_2.0.3_源码分析_服务器端__

    Pushlet 2.0.3 是一个开源的服务器推技术实现,主要针对Java平台。它允许服务器主动将数据推送给客户端,支持浏览器和桌面应用程序。本文将深入分析Pushlet 2.0.3的服务器端源码,了解其架构、工作原理及关键实现。 ...

    PUSHLET即时通讯工程实例

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

Global site tag (gtag.js) - Google Analytics