`
gaojingsong
  • 浏览: 1153389 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【Pushlet 介绍】

阅读更多

Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。

 

 

server端向浏览器client发送通知这种通讯模式在J2EE应用中很常见,通常使用采用RMI、CORBA或者自定义TCP/IP信息的applet来实现。这些技术往往由于复杂而产生诸多不利之处:技术难以实现、存在防火墙限制(因为需要打开非HTTP的通讯端口)、需要额外的server开发和维护。并且除了刷新整个页面或者完全采用applet展示内容之外,很难找到别的方法将client端applet的状态和浏览器的页面内容集成在一起。

 

Pushlet是一种comet实现:在Servlet机制下,数据从server端的Java对象直接推送(push)到(动态)HTML页面,而无需任何Java applet或者插件的帮助。它使server端可以周期性地更新client的web页面,这与传统的request/response方式相悖。浏览器client为兼容JavaScript1.4版本以上的浏览器(如Internet Explorer、FireFox),并使用JavaScript/Dynamic HTML特性。而底层实现使用一个servlet通过Http连接到JavaScript所在的浏览器,并将数据推送到后者。有关JavaScript版本的知识请参看Mozilla开发中心提供的《JavaScript核心参考》和Stephen Chapman编写的《What Version of Javascript》。

 

这种机制是轻量级的,它使用server端的servlet连接管理、线程工具、javax.servlet API,并通过标准Java特性中Object的wait()和notify()实现的生产者/消费者机制。原则上,Pushlet框架能够运行在任何支持servlet的server上、防火墙的后面。当在client中使用JavaScript/DHTML时,Pushlet提供了通过脚本快速建立应用、使用HTML/CSS特性集成和布局新内容的便利方法。

 

 

原理

Pushlet的基本使用形式是极为简单的。后面的一些示例会说明这一点。

Pushlet基于HTTP流,这种技术常常用在多媒体视频、通讯应用中,比如QuickTime。与装载HTTP页面之后马上关闭HTTP连接的做法相反,Pushlet采用HTTP流方式将新变动的数据主动地推送到client(客户端),再此期间HTTP连接一直保持打开。有关如何在Java中实现这种Keep-alive的长连接请参看Sun提供的《HTTP Persistent Connection》和W3C的《HTTP1.1规范》。

 

 

解决方案

让我们对应用进行这样的假设:拥有一个Java web server或者Java应用server,我们试图从server发送通知给client端浏览器。这里的解决方案可以分为:“轮询(polling)”、“服务端回调(server-side callbacks)”和“消息(messaging)”三类。

 

轮询

最简单的解决方案便是“定时刷新页面”。在HTML文档的头部使用HTML META标签,页面便可以每隔N秒自动reload一次。如果在此期间server端数据发生变化,那么我们可以获得新的内容,否则将得到相同的页面。虽然方法很简单,但是如何设置刷新间隔是让人头疼的大问题。

服务器回调

因为我们是“身经百战”的Java开发老手,所以经常会用到“服务端回调”。这种方式通过RMI或者CORBA将Server端的对象传输到Java applet客户端。

 

消息(MOM)

这种解决方案采用一个作为client的applet,它使用TCP/IP或者无连接的UDP、甚至多播协议来建立与消息中间件server的通讯,然后由server推送消息给client。你可以从例如SoftWired的iBus、IBM的MQSeries、BEA的WebLogic Event这些消息产品中直接挑选,或者自己使用基于socket的 .ObjectStream定制开发消息软件。

 

讨论(MOM)

上面三种解决方案在复杂性、安全性、性能、可测量性、浏览器兼容性、防火墙限制上各有优势、劣势。最佳解决方案依赖于你的应用需求。例如,在共享白板应用中,用户需要直接与“状态”交互,那么server端回调或者消息很可能会大显身手。

但在浏览器环境下,除非完全使用applet作为整个client应用,否则把来自于server的更新信息集成到页面中并非易事。如何在applet收到回调或者消息时变更页面相关内容?一个很“痛快”而又“痛苦”的解决方案就是在回调方法中使用AppletContext.showDocument(URL)方法来刷新整个页面。

 

由于HTML代码可以直接影响页面布局,直接使用来自server的数据更改HTML部分内容不是更好吗?这是web应用的理想方案,在server上内容动态改变时,从用户到server所需的交互是最小化的。作为对上面的解决方案的补充,我开发了Pushlet这种轻量级、瘦客户端的技术,它无需applet或者插件而直接与脚本/HTML集成在一起、使用标准HTTP连接、理论上可以部署到任何支持Java servlet的server上。但这并不意味着它将替换对前面解决方案,而是在你的开发“工具箱”中添加另一种选择。作为Java构架者/开发者,你可以自行权衡、选择、决定哪种适合应用的解决方案。

0
0
分享到:
评论

相关推荐

    pushlet 和comet 资料介绍

    pushlet 和comet 资料介绍 介绍如何从服器端push subscrite 给浏览器

    pushlet jar包下载

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

    pushlet

    pushlet开发与应用

    pushlet白皮书

    pushlet白皮书pushlet白皮书pushlet白皮书pushlet白皮书pushlet白皮书

    pushlet简单配置应用

    pushlet配置应用实例,看了之后就能简单应用pushlet实时推送数据

    pushlet-sessionid.jar ajax-pushlet-client.js pushlet.properties

    pushlet 所需夹包 和配置文件 ajax-pushlet-client.js pushlet-sessionid.jar sources.properties pushlet.properties

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

    实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...

    pushlet例子

    pushlet例子,Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的...

    Pushlet简单示例测试

    Pushlet简单示例测试

    Pushlet白皮书

    1.介绍(Introduction) 3 2.动机(Motivation) 4 3.通知解决(Notification Solutions) 5 3.1轮询(Polling) 6 3.2服务器端回调(Server-side callbacks) 6 3.3 消息(Messaging MOM) 6 3.4讨论(Discussion) 7 4....

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

    实现通过pushlet,进行点对点聊天功能。 包括: 在线用户上线的通知 离线的通知 来新消息时的通知 前台使用Ext ,后台使用pushlet /pushlet/WebRoot/index.jsp 页面主要包含几个部分。 Ext.PUSHLET_URL='...

    Pushlet的Ajax-pushlet-client.js分析

    Pushlet的Ajax-pushlet-client.js分析 服务器推技术前台js分析 希望能帮到大家

    pushlet文档和项目

    pushlet文档和项目

    pushlet简单demo,导入即可运行

    pushlet简单demo,导入即可运行 Java 推送 长连接 轮询 pushlet comet4j

    服务器推送pushlet讲解

    对comet实现中的pushlet框架进行说明,可以参照该说明进行框架使用

    pushlet实现简单的用户聊天

    容易上手的简单pushlet例子,供大家学习,代码不错,值得下载。

    pushlet.jar(2.0.4)

    Pushlet 是一个开源的 Comet 框架,Pushlet 使用了观察者模式:客户端发送请求,订阅感兴趣的事件;服务器端为每个客户端分配一个会话 ID 作为标记,事件源会把新产生的事件以多播的方式发送到订阅者的事件队列里。 ...

    PushLet实例,可直接运行

    pushlet 实例,简单实例,带jar包,可直接运行

    pushlet获取参数修改过的jar包

    在使用的过程中发现,如果要在pullEvent()方法中获取参数比较麻烦,查看源码发现nl.justobjects.pushlet.servlet.Pushlet中已经将request参数传进了Session(注意是nl.justobjects.pushlet.core.Session)。...

    pushlet实例以及jar

    资源简介pushlet可以用于消息及时提示.这个例子主要是一个pushlet的小小的实例。 jar包 非常实用,目前正在使用中,稳定

Global site tag (gtag.js) - Google Analytics