DWR 推技術(轉http://blog.csdn.net/cxhzqhzq/archive/2008/07/07/2621081.aspx)

DWR2.0.x的推技術以推發送消息,適用於ChatRoom,股票信息顯示等場景,優於現在JS定時輪詢服務端的策略,大大節省服務端的資源(數據無變化時不需要應答客戶端的定時查詢)。

在2.0M3開始終於能夠正常運作。(注意,2.0M3需要到http://dwr.dev.java.net下載)

推技術的經典範例是DWR Examples裏的ChatRoom,另外SpringSide裏的場景也非常實在。

1. 推消息的接收頁
    1.<script type='text/javascript' src='<c:url value="/dwr/engine.js"/>'></script>
    <script type='text/javascript' src='<c:url value="/dwr/interface/orderNotice.js"/>'></script>
    <script type='text/javascript' src='<c:url value="/dwr/util.js"/>'></script>

  2.<script language="javascript">
        function receiveMessages(id) {
            $('orderNotice').innerHTML = "收到id爲" + id + "的新訂單!";
            $('orderNotice').show();
        }
    </script>
    3.<body οnlοad="DWREngine.setReverseAjax(true);">

   <div id="orderNotice"/>
第一,引入dwr及那個負責執行推操作的Java類(OrderNotice)的js

第二,設定任意的接收推信息的js函數

第三,在body的onload裏設定ReverseAjax=true,開始偵聽信息

詳見springside-bookstore/webapp/admin/top.jsp

2.負責推送消息的Java類
 public class OrderNotice {
    public void noticeNewOrder(int id) {
        WebContext wctx = WebContextFactory.get();
        ScriptBuffer script = new ScriptBuffer();
        script.appendScript("receiveMessages(")
                .appendData(id)
                .appendScript(");");        ServerContext sctx = ServerContextFactory.get(wctx.getServletContext());
        Collection<ScriptSession> pages = sctx.getScriptSessionsByPage("/springside/admin/top.jsp");
        for (ScriptSession session : pages) {
            session.addScript(script);
        }
    }
}可見,用ScriptBuffer構造一段在客戶端執行的SQL,然後使用WebContext ,ServerContext 定位需要發送的session進行發送。注意這裏HardCode了URL路徑來確定Subscriber,也可以像ChatRoom裏面那樣,用currenpage 發給與orderNotice的調用者發起者在同一頁的session。

3.其餘工作
設定dwr.xml,按Dwr的老模式,從客戶端調用OrderNotice。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/cxhzqhzq/archive/2008/07/07/2621081.aspx

發佈了153 篇原創文章 · 獲贊 5 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章