GWTP (MVP の分離、Gin、および Dispatch を含む) を使用するプロジェクトを取得しました。現在、サーバー上の変更を特定のクライアントにプッシュする必要がある状況にあります。
gwt-comet と gwteventservice のドキュメントを読みました。1 つ目は RPC では機能せず、2 つ目は Ecnapsulates RPC で動作しないようです。GWTP からの現在のコマンド パターンに適合させる方法がわかりません。アイデア?
GWTP (MVP の分離、Gin、および Dispatch を含む) を使用するプロジェクトを取得しました。現在、サーバー上の変更を特定のクライアントにプッシュする必要がある状況にあります。
gwt-comet と gwteventservice のドキュメントを読みました。1 つ目は RPC では機能せず、2 つ目は Ecnapsulates RPC で動作しないようです。GWTP からの現在のコマンド パターンに適合させる方法がわかりません。アイデア?
私は gwt-comet ( http://code.google.com/p/gwt-comet/ ) を使用しています。これは、RPC と同様に機能するネイティブのコメット実装であり、文字列や GWT でシリアル化されたオブジェクトも送信できます。そして、それを機能させるために多くのことをする必要がないという最高のこと.
これは実際にはサーブレットの問題であり、GWTやGWTPの問題ではありません。
したがって、これを行うにはいくつかのアプローチがあります。(私の意見では)最も安定しているのは、長いまたはブロッキングのサーブレットサーブレットを使用することです。これは基本的にクライアントによってポーリングされるサーブレットであり、クライアントに「プッシュ」するメッセージがない場合、および時間が経過しすぎる場合(これはhttpタイムアウトを回避するためです)、接続を一定期間開いたままにします。ある種のハートビートが返されます。いずれにせよ、サーブレット要求要求が返されると、クライアントは別の要求を行うだけです。これは、コアサーブレットAPIのみを使用し、ネットワークの問題に悩まされることはなく、ブロッキング部分により、サーバーに一定期間ポーリング「パーク」を設定できるため、私の考えでは最も移植性が高く安定した方法です。リクエストの総負荷を軽減すると同時に、利用可能な情報がある場合にクライアントに新しい情報を非常に迅速に返すことができます。
これを実現する次の方法はWebSocketを使用することです。これは、機能するようになったら素晴らしいことです。私の意見では、間違いなく将来の方法です。これは、私の意見では、Webアプリケーションが頭角を現すとパラダイムシフトになるので、これを使用するのに適していると思います。したがって、私たち全員がスピードを上げる必要があります。基本的に、JavaScriptの「ソケット」をポート80経由で開いており(ファイアウォールの穴を開ける必要がないため、これは最高の機能の1つです)、そのソケットを介して2方向で通信できます。
Cometも機能しますが、通常は1つのサーバータイプに固定されます。これは、アプリケーションにとっては問題ない場合があります。ここに警告!!!! 私は彗星を使って非常に小さなテストを行っただけで、セットアップしたときは不安定で、セットアップしたときのブロッキングポーリングソリューションほど安定していませんでした。
今、私の意見では最も近いものですが、これはおそらく単一ドメインのイントラネットアプリケーションに対するネットワークの制約のために非常に制限されており、アプレットベースのプッシュを使用することです。このセットアップ(udpまたはストレートソケットで実行できます。概念的にすべてを単純にするためにすべてのWebを実行しました)は、アプレットを取得し、それを使用してクライアント上のjettyサーバーインスタンスを起動し、ページに公開します。サーバーへのクライアントの突堤「エンドポイント」。この時点で、クライアントはサーブレットを使用してサーバーに接続でき、サーバーは桟橋サーバーに公開されているサーブレットでクライアントに接続できます。これは本当のプッシュです、それはneatoですが、ネットワークの悪夢があります。
したがって、上記のすべての中で、私は長いポーリングを使用し、Webソケットは将来のことを考えているので注意を払い、アプレットベースのバージョンが本当に好きですが、ネットワーク解像度の制限のために使用がかなり制限されています。
これが決まったら、GWTPから、サーバーに接続して応答を受信するために必要なアクションまたはJSNIブリッジメソッドを使用するだけです。これは、GWTやGWTP中心の質問というよりも、実際にはコアサーブレット/ http / javascriptの質問であるため、ここでは説明しません。
お役に立てば幸いです。
ここで説明されている「GWTのサーバープッシュ」を使用しましたhttp://code.google.com/p/google-web-toolkit-incubator/wiki/ServerPushFAQ -小さなプロジェクトではかなりうまくいくようです。