Pushlet 的 Ajax-pushlet-client.js 分析
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,
评论4