本文主要是介绍dwr 中的长连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
dwr里面的push技术可以做这样的事情:服务器发送一个广播,让每一个客户端都能接收到这个广播。一般的做法,就是让客户端每隔一定时间刷新一下,获取服务器发送的请求,这种方法可以,不过性能一定是最低的。dwr的push技术是让服务器每次发送广播时,把这个广播推送给客户端,不用客户端去刷新,据说是dwr的推送是基于长连接的,性能不错,具体的原理,我暂时也没搞清楚,先不管这些了,先实现了再说。
这里我假设你已经会用dwr的基本使用了。
修改web.xml,启用dwr的Reverse Ajax,也就是我们要用的push技术:
<servlet><servlet-name>dwr-invoker</servlet-name><servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class><init-param><param-name>debug</param-name><param-value>true</param-value></init-param><init-param><param-name>activeReverseAjaxEnabled</param-name><param-value>true</param-value></init-param><init-param><param-name>initApplicationScopeCreatorsAtStartup</param-name><param-value>true</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>dwr-invoker</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>
添加一个Servlet,用来发送广播:
public class TestServlet extends HttpServlet {public TestServlet() {super();}protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {ServerContext wctx = ServerContextFactory.get(getServletContext());Collection<ScriptSession> sessions = wctx.getAllScriptSessions();// Collection<ScriptSession> sessions =// wctx.getScriptSessionsByPage("/poject/test.html");String msg = request.getParameter("msg");if(msg==null){msg = "empty";}ScriptBuffer script = new ScriptBuffer();script.appendScript("showMessage(").appendData(msg).appendScript(");");for (ScriptSession session : sessions) {session.addScript(script);}}
}
添加一个html页面,用来接收服务端广播:
<mce:script type='text/javascript' src="dwr/engine.js" mce_src="dwr/engine.js"></mce:script>
<mce:script type="text/javascript"><!--
dwr.engine.setActiveReverseAjax(true);
function showMessage(msg)
{ alert(msg);
}
// --></mce:script>
打开添加的html页面,然后打开Servlet发送一个广播,哈哈,html页面就会自动弹出一个javascript对话框,到此,dwr的推送就完成了
转载自: http://blog.csdn.net/zl3450341/article/details/4873669
这篇关于dwr 中的长连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!