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退订;
相关推荐
pushlet 所需夹包 和配置文件 ajax-pushlet-client.js pushlet-sessionid.jar sources.properties pushlet.properties
2. **ajax-pushlet-client.js**:这是一个JavaScript文件,可能是用于客户端与Pushlet服务器进行交互的库。在Web应用中,客户端通常使用JavaScript来处理用户交互并接收服务器推送的数据。此文件可能封装了与Pushlet...
ajax-pushlet-client.js,PL添加了parameters属性,修改了_doRequest函数,在函数的最后加了如下一段: if(PL.parameters.length > 0) { for (var i = 0; i < PL.parameters.length; i++) { var para = PL....
在客户端,你需要在 HTML 页面中引入 ajax-pushlet-client.js 文件,这提供了与 Pushlet 交互的 JavaScript API。使用这些 API,你可以初始化 Pushlet,如 `PL._init()`,然后订阅你想接收数据的主题,例如 `listen...
5. **客户端JavaScript使用**:在HTML页面中,你需要引入`ajax-pushlet-client.js`这个客户端JavaScript库。然后,通过调用`PL._init()`初始化Pushlet,`PL.joinListen('/pushlet/test')`订阅特定的主题,例如'/...
- **JS 文件修复**:修改 `ajax-pushlet-client.js` 文件中的 `PL.pushletURL`,避免 Pushlet 地址解析错误,确保客户端能正确连接到服务器的 Pushlet 服务。 3. **中文问题处理**: - 当推送包含中文内容时,...
对于开发者来说,研究"ajax-pushlet-client-hym_sunrise.js"的源码可以帮助理解Pushlet的工作机制,包括如何创建连接对象、发送请求、解析服务器返回的数据以及处理错误情况等。 6. **工具应用** Pushlet可以应用...
在文件列表中,"ajax-pushlet-client.js"很可能是一个JavaScript库,用于在浏览器端实现Pushlet的客户端功能。它可能包含了处理与服务器建立连接、接收推送消息以及断开连接等功能的代码。而"src"可能包含Pushlet...
在描述中提到的博客链接,可能详细解释了如何配置和实现Pushlet,包括服务器端的设置、客户端的JavaScript交互以及如何在后端处理用户ID以实现定向推送。博客可能还涵盖了如何处理网络延迟、连接中断和重连的策略,...
- 在客户端,创建一个JavaScript或者AJAX客户端,用于与Pushlet Server建立连接,并监听接收的数据。 - 服务器端需要监控数据源,当有新数据时,通过Pushlet API将消息发送给已连接的客户端。 - 客户端接收到推送...
"Pushlet Demo"是一个基于Java技术的服务器推送(Server Push)示例,它利用了Comet技术来实现实时的Web交互,这是对传统Ajax(Asynchronous JavaScript and XML)技术的一种扩展。在Ajax中,通常是由客户端发起请求...
近日有人咨询Pushlet XMLAdapter 适配器的问题,我特留意了一下 到官方看了一下http://www.pushlets.com/,Development Roadmap中最后面说到了这个问题,AJAX (XMLHttpRequest) Support 使用AJAX (XMLHttpRequest)...