dwrのReverse Ajax(プッシュ技術の実現の一つ)


dwrのReverse Ajaxの前はずっと使ったことがなくて、最近プロジェクトの中で研究に関わったので、やはり記録を残しましょう.
dwrの逆ajaxは、主にアクティブモードとパッシブモードの2つのモードを含む.ここで,アクティブモードはPollingとCometの2種類を含み,パッシブモードはPiggybackの1種類のみである.
Piggybackとは、バックグラウンドに何かをフロントにプッシュする必要がある場合(すなわち、ページを呼び出すjsメソッド)であり、そのページが次のajaxリクエストを行うまで待って、プッシュする必要があるコンテンツをそのリクエストに添付した後、ページに返信することをいう.
pollingとは、ブラウザがajaxリクエストをタイミングよくサービス側に送信し、バックグラウンドにプッシュが必要かどうかを尋ねると、サービス側からプッシュコンテンツが返されることがある.この方法は,ページでタイマを介してajaxリクエストを直接送信し,バックグラウンドに変化コンテンツがあるかどうかを問い合わせる実装と同様である.ただdwrを使った後、この仕事はフレームワークで完成しました.
cometモードとは、サービス側がブラウザとの接続を確立し、ページ内容をブラウザに送信した後、対応する接続は閉じず、一時的に保留することを指す.後で何か新しいコンテンツがクライアントにプッシュされる必要がある場合は、前に掛けた接続を通じてデータを再転送します.
以上の説明から,この3つのモードにはそれぞれの長所と短所があることが分かった.クライアントリクエスト回数の観点からは当然piggybackのモードが最良である.この中には追加のネットワークリクエストは全くなく、次のリクエストページが自発的に開始されるまで待って、中間の変化内容がページに返されます.しかし、これは、ページの次のリクエストがいつ開始されるか分からないため、ページに次のリクエストがない可能性があります.pollingモードのネットワークリクエストが最も頻繁になります.この場合、ページはバックグラウンドに更新された内容があるかどうかにかかわらず、リクエストメッセージを送信する必要があります.このモードでは、要求間隔を増やすことで単位時間当たりの要求回数を減らすことができるが、これにより、ページ応答バックグラウンドコンテンツの変化の間隔時間が長くなり、その間に矛盾が生じ、具体的な要求間隔時間は、ボディアイテムのニーズに応じて構成される.たとえば、サーバが耐えられるリクエスト間隔やページコンテンツに必要なリフレッシュ頻度などです.comet方式の応答速度は最も速いはずで、バックグラウンドにコンテンツがあると、前に閉じていない接続を通じてすぐにフロントにプッシュすることができます.しかし、サーバが提供できる接続数は一定であり、大量の保留中の接続が閉じられていない場合、新しい接続要求がアクセスできず、サービス品質に影響を及ぼす可能性があります.
コンフィギュレーション
ピグラック方式
dwrのデフォルトはpiggybackというパッシブモードを採用しており、このモードを採用する必要がある場合は追加の構成を必要とせずに完了します.
comet方式
アクティブモードを採用する必要がある場合は、対応する構成が必要であり、まずwebで行う必要がある.xmlのdwrのservletには、次のパラメータが構成されています.
<servlet>
   <servlet-name>dwr-invoker</servlet-name>
   <display-name>DWR Servlet</display-name>
   <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
   <init-param>
     <param-name>activeReverseAjaxEnabled</param-name>
     <param-value>true</param-value>
   </init-param>
 </servlet>

プッシュコンテンツを受け入れる必要があるページbodyのonloadイベントで呼び出す必要がある
    dwr.engine.setActiveReverseAjax(true);
メソッドを使用して、ページのReverseAjax機能を起動します.この場合、デフォルトではcomet方式でページコンテンツのプッシュを完了します.
polling方式
polling方式を採用するにはcomet方式に基づいてservletパラメータに以下のパラメータを加えるだけです
<init-param>
  <param-name>org.directwebremoting.extend.ServerLoadMonitor</param-name>
  <param-value>org.directwebremoting.impl.PollingServerLoadMonitor</param-value>
</init-param>

ここで、ページのデフォルトのリクエスト間隔は5秒で、構成が必要な場合は以下のパラメータで完了します.
<init-param>
  <param-name>disconnectedTime</param-name>
  <param-value>60000</param-value>
</init-param>

リクエスト間隔を60秒に設定します
コールモード
バックグラウンドでは、以下のようにコンテンツをプッシュできます.

    ScriptBuffer script = new ScriptBuffer();

    script.appendScript("           js      ");
      ServerContext sctx = ServerContextFactory.get(servletContext);
      if (sctx != null){
       Collection pages = sctx.getScriptSessionsByPage("              ,  /book/list.jsp");
       Iterator it = pages.iterator();
       while(it.hasNext()){
        ScriptSession session = (ScriptSession)it.next();
        session.addScript(script);
       }
      }

ここでservletContextは、フロントリクエストによって送信されてもよいし、springのサーブレットContextAwareインタフェースをこのクラスによって実現してspirngによって注入されてもよい.サーバContextFactoryを呼び出します.get(servletContext)メソッドの前にdwrのコンテキストが確立されています.
以上の作業が完了すると、dwrがReverse Ajaxを通じてもたらすサプライズ体験を楽しむことができます.csモードでserverがclientを直接操作するように便利なbrowserを操作することができます.急いで感じましょう.
dwrバージョン
本明細書で論じる構成はすべてdwr 3に対するものである.0の環境でテストに合格し、dwr公式サイトの説明に従ってdwr 2にすべきである.0.4以降のバージョンでは、このように構成できます.これまでのバージョンで行う必要がある異なる構成については、dwr公式サイトのドキュメントを参照してください.