進歩からのお知らせをHTTP/RESTサービス
-
20-08-2019 - |
質問
ようにウェブアプリケーションする提出課題をマスター/労働システム農場でのシリーズの労働者のう場合がございます。作業キューマスター運行して、独立したプロセスとして、別の機械全て)タスク募集は行わない場合があります士通HTTP/残ります。一度課題募集は行わない場合がありますの作業キュー、クライアントアプリケーションでの提出を別のHTTPリクエストを取得状況に関する情報です。
自分のwebアプリケーション思いを何らかの進捗バービュー、ユーザに示すのかとタスクの処理をさせていただきました。の方法が実施できることであるAJAXメーターウィジェットが定期的に調べのキューの状態を作ることが提案されました。私の質問は、より良い方法をこなしのポーリング?
私はを考えるので、お客様のwebアプリケーション、サーバソケットで話を聞くことができたからのお知らせを修正します。この思いはXMPPまたは類似のプロトコルの状態を通知を選択するフィルタ。(もちろん、マスター/労働システムが必要となる場合があるの更新を通知いずれかをコードする上で必要な更新です。)
意思想の最良の方法を通知システムはこのような態度を取るのか。は、エキストラ努力の価値で、単純なポーリング溶液のでしょうか。
解決
いくつかの要因に依存すると思います
- フィードバックの精度(1%、5%、50%)
正確なフィードバックは、何らかのプログレスバーとコメットスタイルのプッシュを追求する価値があります。 <!> quot;と言うだけの場合は、忙しい...ちょっと待って...もうすぐ...完了<!> quot;その後、単純なajax <!> quot;我々はまだ<!> quot;ポーリングは確かにコーディングが簡単です。 - 完了メッセージをクライアントがどれだけタイムリーに見る必要があるか
- 各タスクにかかる時間(1秒、10秒、10分)
1秒で少し意味がなくなります。 10秒は価値があります。 10分は、ユーザーがコーヒーブレークに行くことを提案した方が良いことを意味します:-) - 同時リクエストがいくつあるか
<!> quot; special <!> quot;がない限り、サーバー、ライブプッシュスタイルのシステムは接続を消費する傾向があり、すぐに使い果たされます。派手なプログレスバーのためにより多くのWebサーバーを投入しなければならない場合、予算が損なわれる可能性があります。
編集 ジョン指摘するように、ステータスレポートはおそらくRESTfulサービスの仕事ではありません。しかし、サービスをポーリングするサーバー上のページにフックするクライアントでiframeを開くことができないということは何もありません。理論によれば、サーバーとサービスは少なくとも互いに近くなるということです:-)
他のヒント
ポーリング
クライアントは、サーバーのポーリングを続けて、応答のステータスを取得します。
長所
- 本当にRESTfulであるということは、キャッシュと拡張が可能であることを意味します。
短所
- サーバーをあまりポーリングしたくない場合、最高の応答性ではありません。
持続的接続
サーバーは、応答が完了するまでクライアントとのHTTP接続を閉じません。サーバーは、HTTPマルチパートを使用して、この接続を介して中間ステータスを送信できます。
Comet は、この動作を実装する最も有名なフレームワークです。
長所
- 最高の応答性、サーバーからのほぼリアルタイムの通知。
短所
- 接続制限はWebサーバーで制限されているため、接続を長時間開いたままにしておくと、サーバーに負荷がかかっても、最悪の場合でもサービス拒否攻撃にさらされる可能性があります。
サーバーとしてのクライアント
別のRESTfulアプリケーションであるかのように、サーバーがステータスの更新とクライアントへの応答をポストするようにします。
長所
- すべての世界でベスト、サーバー側またはクライアント側のいずれでも、応答を待つリソースが無駄になりません。
短所
- クライアントに完全なHTTPサーバーとWebアプリケーションスタックが必要です
- デフォルトの<!> quot;着信接続がまったくない<!> quot;のファイアウォールとルーター邪魔になります。
自由に編集して、考えや新しい方法を追加してください!
ポーリングソリューションに固執することですが、 HTTPに関するこのウィキペディアの記事に興味があるかもしれませんプッシュテクノロジー。
RESTは、要求/応答プロトコルであるHTTPに依存しています。純粋なHTTPサーバーがクライアントにステータスを返してくるとは思わない。
さらに、ステータスレポートはサービスの仕事ではありません。いつステータスを報告するか、または報告するかどうかを決定するのはクライアント次第です。
見 彗星.す単一の請求をサーバやサーバーにブロックとの接続で、更新状況が発生します。一度その状態になってしまうとの回答が送信されます。のブラウザを受けその対応が取り扱っており、すぐに再要請と同じURL。その効果は、イベントにて開催される事が発表されます。賛否両論あるところでも適切ではないかもしれませんすべての使用例が提供する最適な状態です。
セルフリフレッシュiframeを使用することもできますが、AJAX呼び出しの方がはるかに優れています。他に方法はないと思います。
PS:クライアントからソケットを開く場合、それはあまり変わりません-PHPブラウザーはページをまだ<!> quot; loading <!> quot;として表示しますが、これはあまりユーザーフレンドリーではありません。 (前に他のものを表示するためにバッファをプッシュまたはフラッシュすると仮定します)