深入dwr2-commet模式

dwr2-commet模式分为两种 :
A 全连接模式 (Full Streaming Mode)
B 早关闭连接模式 (Early Closing Mode)

从实现原理上讲两种模式没有什么本质区别,只是服务端探测浏览器是否关闭的频率不一样。
dwr2.0.0-2.0.3之间的版本默认为全连接模式,2.0.4及以后版本默认为早关闭模式
要是dwr2的翻转模式生效至少需要做两个配置
1在web.xml加入
<init-param>
<param-name>activeReverseAjaxEnabled</param-name>
<param-value>true</param-value>
</init-param>
2在要实现翻转功能的页面加入js代码
dwr.engine.setReverseAjaxEnable(true);
设置了翻转的页面,调用js请求服务器(dwr的一般 ajax应用,通常是在js的回调函数中处理reponse的结果)时,dwr会
返回一个js调用的字符串
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/ javascript" class="t_tag"> javascript
Content-Length: 121
Date: Fri, 11 Apr 2008 05:51:26 GMT

throw 'allowScriptTagRemoting is false.';
//#DWR-INSERT
//#DWR-REPLY
dwr.engine._remoteHandleCallback('0','0',null);

这个字符穿返回给客户端后,通过_remoteHandleCallback这个js方法立即发出第二次Ajax请求到服务器,
服务器收到请求后会再满足下面的连个条件之一时返回
1)超过设定时间客服端没有新的请求到来(全连接模式为60s,早关闭模式为设定的毫秒数)
2)服务端主动调用客户端js代码(比如,scriptSession.addScrit()...类似的方法)
如果是第一中情况dwr只返回dwr.engine._remoteHandleCallback,让客户端接到响应后立即发出Ajax调用(目的是检查客户端是否已经关闭)。
2如果是第二种情况则返回服务端调用客户端的js方法加上remoteHandleCallback的调用,

若想参考更多,可以到程式先锋网站上看看:[url]http://www.javabiz.cn[/url]

下面是第二种情况返回的一个示例
//#DWR-START#
loginSuccess({borswerId:"de31d1e1",clientId:"hanxf",message:null,sendTime:"08-04-11 01:51:26"},true);
//#DWR-END#

4a
//#DWR-START#
dwr.engine._remoteHandleCallback('1','0',0);
//#DWR-END#
dwr就样通过在服务端返回js到浏览器端,从而判断是否回调来确定对应的客服端是否已经关闭
此外dwr设计了“欺骗session”,目的是让检查浏览器是否关闭的信息传递时,不让服务器更新session时间,否则session超时大于dwr的检测间隔时间,session永远不会失效。dwr还能自动识别jetty服务器,减少长连接带了的资源消耗

你可能感兴趣的:(模式,职场,连接,休闲,dwr2-commet)