(3)polling方式由浏览器定时向服务端发送ajax请求,询问后台是否有什么内容需要推送,有的话就会由服务端返回推送内容。这种方式和我们直接在页面通过定时器发送ajax请求,然后查询后台是否有变化内容的实现是类似的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package
sugar.dwr;
import
java.util.Collection;
import
org.directwebremoting.Browser;
import
org.directwebremoting.ScriptBuffer;
import
org.directwebremoting.ScriptSession;
public
class
MessagePush {
public
void
send(
final
String content){
Runnable run =
new
Runnable(){
private
ScriptBuffer script =
new
ScriptBuffer();
public
void
run() {
//设置要调用的 js及参数
script.appendCall(
"show"
, content);
//得到所有ScriptSession
Collection
//遍历每一个ScriptSession
for
(ScriptSession scriptSession : sessions){
scriptSession.addScript( script);
}
}
};
//执行推送
Browser. withAllSessions(run);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<%@ page language= "java" import ="java.util.*" pageEncoding="UTF-8" %>
<
html
>
<
head
>
<
title
>dwr接收
title
>
<
script
src
=
"js/jquery-1.8.3.js"
>
script
>
<
script
type
=
"text/javascript"
src
=
"dwr/util.js"
>
script
>
<
script
type
=
"text/javascript"
src
=
"dwr/engine.js"
>
script
>
<
script
type
=
"text/javascript"
src
=
"dwr/interface/messagePush.js"
>
script
>
head
>
<
body
>
dwr接收<
br
/>
<
div
id
=
"content"
style
=
" width: 200px ;height: 30px;border : 1px solid ; text-align: center ; padding: 5px;"
>
div
>
<
script
type
=
"text/javascript"
>
//这个方法用来启动该页面的ReverseAjax功能
dwr.engine.setActiveReverseAjax( true);
//设置在页面关闭时,通知服务端销毁会话
dwr.engine.setNotifyServerOnPageUnload( true);
//这个函数是提供给后台推送的时候 调用的
function show(content){
$( "#content" ).text(content);
}
script
>
body
>
html
>
|
ScriptSession的维护及优化
DWR3.0可以通过
//执行推送 Browser.withAllSessionsFiltered(filter, run); //注意这里调用了有filter功能的方法2.通过参数可知我们需要一个 ScriptSessionFilter对象,此时send的方法改写成如下:
这样我们可以给不同客户端的jsp中导入不同的tag值,过滤推送的客户端