`

(zt)Pushlet的Ajax-pushlet-client.js分析(一)

    博客分类:
  • JAVA
阅读更多
Ajax-pushlet-client是pushlet的ajax客户端方式,对该JS进行分析后发现,它是采用了面向对象的javascript技术和充分利用XMLHttpRequest对象来实现的HTTP长连接,达到了服务器“推”技术。


1、属性
NV_P_FORMAT: 'p_format=xml-strict',//数据格式,默认是严格严格XML

    NV_P_MODE: 'p_mode=pull', //pushlet采用的模式,默认为pull模式

    pushletURL: null,//请求URL地址

    webRoot: null,//项目根路径

    sessionId: null,//sessionId

    STATE_ERROR: -2,//一些状态常量

    STATE_ABORT: -1,

    STATE_NULL: 1,

    STATE_READY: 2,

    STATE_JOINED: 3,

    STATE_LISTENING: 3,

    state: 1,//状态


       statusMsg: 'null', //状态消息

    statusChanged: false,//状态是否发生了改变

    statusChar: '|',//状态分隔符


2、方法
       _init:获取XMLHttpRequest对象

设定pushlet的请求URL

将状态置为STATE_READY.


    _doRequest (anEvent, aQuery):首先判断是不是出现错误,然后再判断是否需要等待状态,若不需要等待则构建查询字符串。最后调用_getXML(url, PL._onResponse)方法向服务器发出请求,后一个参数为回调方法。


    _getWebRoot:获取项目根目录,可以根据实际项目修改


    _getXML:以get方式请求URL,用同步或者异步方式


_onResponse(xml):先将xml转变为pushlet事件对象(_rsp2Events),得到多个PushletEvent对象,再调用_onEvent()处理每个事件。


_rsp2Events(xml):取得事件标签(event),然后调用PushletEvent(),可能得到多个PushletEvent对象。


_onEvent(event):处理由服务器端传来的事件,首先判断事件类型,由不同的类型调用不同的处理方法:

Data:调用_doCallback(event, window.onData),方法处理。onData是自定义;

Refresh:从event中取得刷新时间,然后调用_doRequest('refresh')刷新;

Error:将state置为STATE_ERROR,获取错误原因,调用_doCallback(event, window.onError);

join-ack:将状态置为” STATE_JOINED”,取得sessionId,调用_doCallback(event, window.onJoinAck);

join-listen-ack:将state设为STATE_LISTENING,取得sessionId,调用_doCallback(event, window.onJoinListenAck);

listen-ack、hb、hb-ack、leave-ack、refresh-ack、subscribe-ack、unsubscribe-ack、abort、/nack$/等类型也类似。


_addEvent(elm, evType, callback, useCapture):取得elm对象,调用以下三者之一:

obj.addEventListener(evType, callback, useCapture);

obj.attachEvent('on' + evType, callback);

obj['on' + evType] = callback。

当ajax-pushlet-client.js初始化时调用了该方法:PL._addEvent(window, 'load', PL._init, false);即初始化时相当于:window.onload=PL._init();


_doCallback(event,cbFunction):如果指定了回调方法,则调用cbFunction(event),如果没有指定那么调用window.onEvent(event)。


       _getObject(obj):获取对象引用,若参数为对象直接返回该对象引用,若为字符串则按ID取得该对象。



PushletEvent(XML):与nl.justobjects.pushlet.Event相对应。其内部方法或属性如下:

Arr:数组,用于存放链值对;

getSubject():取得p_subject标签值;

getEvent():取得p_event标签值;

put(name, value);将链值对放入arr中;

get(name):按链取得值;

toString:转换为链值对字符串;

toTable:转换为表格;


将传入xml解析到arr中。


其对外公开方法:

heartbeat():实质是调用了PL._doRequest('hb'),向后台请求“hb”事件。再被封装成了:p_heartbeat()精简方式。

相似的方法还有:

Join:_doRequest('join', PL.NV_P_FORMAT + '&' + PL.NV_P_MODE);

joinListen:PL._doRequest('join-listen', query);请求加入同时监听;

leave:_doRequest('leave');

listen(aSubject):_doRequest('listen', query);按主题监听;

publish(aSubject, theQueryArgs):_doRequest('publish', query);按主题发布;

subscribe(aSubject, aLabel):_doRequest('subscribe', query);按主题订阅;

unsubscribe(aSubscriptionId):_doRequest('unsubscribe', query);按订阅ID退订;
分享到:
评论
1 楼 zhuang183 2010-04-19  

相关推荐

    Pushlet的Ajax-pushlet-client.js分析

    在当今的Web开发中,实时通信技术已经成为了一项不可或缺的技能,而Pushlet的Ajax-pushlet-client.js则是实现服务器“推”技术的重要工具。本文将深入剖析这个JavaScript库的核心原理,帮助开发者理解其内部机制。 ...

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

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

    pushlet2.0.4-demo-增加指定人推送

    Pushlet 2.0.4 是一个官方发布的消息推送框架,它为开发者提供了一种高效、可靠的实时通信机制,用于在服务器与客户端之间传递数据。在最新的版本 2.0.4 中,该框架引入了一个重要的新特性——支持指定用户推送,这...

    修改后的pushlet的jar包和js

    2. **ajax-pushlet-client.js**:这是一个JavaScript文件,可能是用于客户端与Pushlet服务器进行交互的库。在Web应用中,客户端通常使用JavaScript来处理用户交互并接收服务器推送的数据。此文件可能封装了与Pushlet...

    pushlet获取参数修改过的jar包

    ajax-pushlet-client.js,PL添加了parameters属性,修改了_doRequest函数,在函数的最后加了如下一段: if(PL.parameters.length > 0) { for (var i = 0; i < PL.parameters.length; i++) { var para = PL....

    pushlet-UserUnicast

    "Pushlet-UserUnicast" 是一个专门针对特定用户进行推送技术演示的项目,它为初学者提供了深入了解和学习推送技术的良好平台。Pushlet是一种基于Java的实时数据推送框架,它允许服务器主动向客户端发送数据,而不是...

    pushlet的笔记

    - **客户端源码**:《(三)Pushlet框架客户端js-pushlet-client.js分析-初始化分析.htm》对JavaScript客户端库进行了详细解读,特别是初始化过程,这对于前端开发者理解如何集成Pushlet到网页应用至关重要。...

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

    在客户端,你需要在 HTML 页面中引入 ajax-pushlet-client.js 文件,这提供了与 Pushlet 交互的 JavaScript API。使用这些 API,你可以初始化 Pushlet,如 `PL._init()`,然后订阅你想接收数据的主题,例如 `listen...

    pushlet简单配置应用

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

    pushlet.jar(2.0.4)

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

    pushlet-2.0.4.rar

    开发者可以利用Pushlet创建实时更新的网页应用,如动态新闻、在线聊天室或实时数据分析展示。 四、工作原理 Pushlet的工作原理基于HTTP长连接,也称为 Comet 技术。当客户端建立连接后,服务器保持连接状态,直到...

    pushlet-2.0.4

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

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

    - **JS 文件修复**:修改 `ajax-pushlet-client.js` 文件中的 `PL.pushletURL`,避免 Pushlet 地址解析错误,确保客户端能正确连接到服务器的 Pushlet 服务。 3. **中文问题处理**: - 当推送包含中文内容时,...

    开源webgis 项目:Esri-Leaflet、Geoservices.js、Terraformer、Pushlet

    Esri-Leaflet、Geoservices.js、Terraformer和Pushlet是四个由Esri公司推出的开源JavaScript项目,这些项目都旨在提供丰富的地理信息系统(GIS)功能,支持开发者在WebGIS应用中实现高效的地图开发。 1. **Esri-...

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

    "Pushlet聊天工具"是一种基于Ajax技术的实时通信解决方案,主要用在Web应用程序中实现双向、实时的数据交换。这个工具的出现,使得Web开发者能够构建类似即时通讯(IM)功能的应用,而无需依赖Flash或者Java Applet等...

    pushlet-2.0.3.rar

    pushlet所需要用到的jar包、js和properties都打包在里面!

    pushlet 扩充,sessionid 采用userid

    在文件列表中,"ajax-pushlet-client.js"很可能是一个JavaScript库,用于在浏览器端实现Pushlet的客户端功能。它可能包含了处理与服务器建立连接、接收推送消息以及断开连接等功能的代码。而"src"可能包含Pushlet...

    pushlet实例以及jar

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

    java服务端推送实例-pushlet-及中文问题

    然后创建一个Pushlet客户端连接到服务器,服务器端则需要创建一个Pushlet服务端组件,该组件监听特定的事件并负责数据推送。在这个过程中,可能会遇到中文字符编码的问题,因为默认的UTF-8编码可能不被正确处理。 ...

    pushlet.jar 和示例工程

    它提供了一个服务端的Pushlet Server,以及可以集成到客户端应用程序的Pushlet Client API。Pushlet Server处理与客户端的持久连接,并负责将消息队列中的数据推送到各个连接的客户端。Pushlet Client API则允许...

Global site tag (gtag.js) - Google Analytics