私はGWTを使用しています。私のクライアントはユーザーからデータを収集し、それをサーバーに送信して非常に長い計算を実行します。計算はさまざまな段階で構成されています。各段階の後、サーバーが計算の残りの部分を続行している間にユーザーが進行状況を確認できるように、サーバーが結果をクライアントに送り返すようにします。
これを行うためのエレガントな方法は何ですか (可能な限り少ないコード)?
私はGWTを使用しています。私のクライアントはユーザーからデータを収集し、それをサーバーに送信して非常に長い計算を実行します。計算はさまざまな段階で構成されています。各段階の後、サーバーが計算の残りの部分を続行している間にユーザーが進行状況を確認できるように、サーバーが結果をクライアントに送り返すようにします。
これを行うためのエレガントな方法は何ですか (可能な限り少ないコード)?
Comet はチャットやその他のリアルタイム アプリケーションに適していますが、これを行う最も簡単で簡単な方法は、並行してその作業を要求するために使用することです。最初のリクエストは、データをサーバーに POST して処理します。2 番目のリクエストは、処理ジョブのステータスを取得します。これは非同期テクニックです
または、サーバー側でプロセスをインクリメントし、各段階でクライアント POST データをリクエストに送信することもできます。この方法はブロック手法です。つまり、ステップ 1 が実行され、ステップ 1 が完了するまでステップ 2 がブロックされます。これは少し簡単ですが、3 つのリクエストを互いのコールバック内にネストする必要があるため、コードはより複雑になります。
COMET の主な制限は、ファイアウォールとポートに関する問題です。これは非常に複雑になる可能性があり、またその QoS は常に 100% 正しいとは限りません。リクエストが正しい順序でプッシュされないこともあれば、常にプッシュされるとは限らないこともあります。そのため、非同期またはブロッキング メソッドを使用して精度を高める必要がある場合に使用します。
参考までに、これらの派手なファイル アップローダーの大半は、非同期手法を使用しています。
サーバー側では、クライアントに送信される更新データを含むセッションに保存される静的フィールドを配置する必要があります。クライアントでは、タイマーを使用してポーリング頻度を指定し、UI を更新します。
リクエストに関しては、基本的にサーブレットのURLとコールバックを受け取る標準のRPCリクエストを使用します。
cometを使用する必要があります。基本的に、サーバーはいつでもビューに通知を送信します。そのために役立つ gwt のフレームワークはたくさんあります。
私のプロジェクトでは、Atmosphere Websocket/comet フレームワークを使用しました。GWT で実装するのは非常に簡単です。