2011-11-13 7 views
1

GWTP(GinとDispatchを含む)を使用したプロジェクトがありましたが、サーバー上の変更を特定のクライアントにプッシュする必要があるようです。GWTPを使用したサーバープッシュの実装

私はgwt-cometとgwteventserviceのドキュメントを読んでいます。最初のものはRPCと2番目のEcnapsulates RPCでは動作しないようですが、私はそれをGWTPの現在のコマンドパターンに適合させる方法がわかりません。アイデア?

答えて

0

ここでは、「GWTでサーバープッシュ」を使用しました。小さなプロジェクトではうまく動作していたようです。

3

私はgwt-comet(http://code.google.com/p/gwt-comet/)を使用しています。これは、RPCのように動作するネイティブの彗星の実装で、StringやGWT直列化されたオブジェクトも送信できます。それを実現させるために多くのことをする必要はありません。

0

これは実際にはサーブレットの問題であり、GWTまたはGWTPの問題ではありません。

これを行うにはいくつかの方法がありますが、最も安定しているのは、長いまたはブロックするポーリングサーブレットを持つことです。これは、基本的にクライアントによってポーリングされたサーブレットであり、クライアントに「プッシュ」するメッセージがなく、あまりにも時間が過ぎれば(これはHTTPタイムアウトを回避するためのものです)何らかの種類の鼓動が返されます。どちらの場合でも、サーブレットの要求が返ってくると、クライアントはもう一度要求を出します。これは、コアサーブレットAPIのみを使用し、ネットワークの問題に悩まされていないので、移植性が高く、安定した方法です。ブロッキング部分では、サーバーに一定期間ポーリングを行うことができます利用可能なものがある場合には、クライアントに新しい情報をすばやく返すことができます。

これを実現する次の方法はWebSocketsによるものです。一度これを有効にすると素晴らしいです。私の意見では未来の方法です。これは私の意見では、Webアプリケーションのパラダイムシフトがスチームの頭を捉えると、これはうまくいくと思うので、スピードアップする必要があります。基本的には、ポート80経由でJavaScriptの「ソケット」を開きます(これは、ファイアウォールの穴を開ける必要がないため、これは最高の機能の1つです)。

Cometも動作しますが、通常は1つのサーバータイプにロックされますが、これはアプリケーションにとっては問題ありません。ここに警告!!!!私は彗星で非常に小さなテストを行っただけです、私はそれを設定するとき私のために薄れていた、と私はそれがを設定していたとして、ブロッキングポーリングソリューションとして安定していませんでした。

私の意見では一番きれいですが、これはおそらくシングルドメインイントラネットアプリケーションのネットワーク制約のために非常に制限されています。アプレットベースのプッシュを使用することです。この設定(udpやストレートソケットで行うことができますが、概念的に単純にするためにすべてのWebを実行しました)は、アプレットを取り出し、それを使ってクライアント上のjettyサーバーインスタンスをスピンアップし、ページにクライアントの桟橋「エンドポイント」をサーバーに送信します。この時点で、クライアントはサーブレットを使用してサーバーに接続でき、サーバーはjettyサーバーに公開されているサーブレットでクライアントに接続できます。これは真のプッシュです、それはneatoですが、ネットワークの悪夢があります。

上記のすべてのことから、私は長いポーリングを使用しています。これは将来のWebソケットであり、アプレットベースのバージョンが本当に好きなので、ネットワーク解像度の制限。

これを決定したら、GWTPからサーバーに接続して応答を受け取るために必要なアクションまたはJSNIブリッジメソッドがあります。これはGWTやGWTP中心の質問以上のコアサーブレット/ http/javascriptの質問なので、これには入りません。

私はそれが助けてくれることを願っています!

関連する問題