4

コンテキスト: JavaScript Web UI から、.NET2.0 バックエンドで実行される長時間 (数分) の操作を起動します。呼び出しは、長時間実行オペレーションが並行して実行されている間、オペレーション ID とともにすぐに返されます。操作は CPU 集中型ではありませんが、低速のネットワーク呼び出しを実行します。操作が完了したら、Web UI で結果を確認したいと考えています。

質問:作業が完了したことをクライアントに通知するにはどうすればよいですか?

私が検討したオプション:

オプション 1 : 長期実行オペレーションを JS から直接非同期で起動し、戻り値がオペレーション ID ではなく最終結果になることを期待しています。私の AJAX ライブラリはすべてを処理し、人生はとても簡単できれいに見えます。問題は、サーバー側のスレッドが ThreadPool スレッドであり、数分間ロックすることです。十分な処理能力がある場合でも、ThreadPool が枯渇し、サーバー全体が機能しなくなる原因となる、実行時間の長い並列要求が多すぎる必要はありません。

オプション 2 : 操作 ID を使用して、操作が完了した場合にサーバーのポーリングを開始します。ただし、これは自分のサーバーに対するサービス拒否攻撃です。さらに、それに対する公正な ajax ソリューションが必要です。これは、固有の問題ではありません。

4

6 に答える 6

3

ポーリングが適切に行われていれば、サーバーの負荷に顕著な影響はありません。サーバー ジョブの詳細を最もよくカバーするように間隔をカスタマイズする必要があります。たとえば、操作に通常より時間がかかることがわかっている場合は、サーバーを少なくとも 2 分間ポーリングしないでください。その後でも、十分に大きな間隔を選択します-たとえば、10秒。Web サービス リクエストまたはカスタム ハンドラーを使用すると、リクエストの処理に必要なトラフィックとサーバー時間が最小限に抑えられます。

于 2009-08-26T11:05:14.647 に答える
3

.NET のコメット実装であるWebSyncを確認してください。まさにあなたが探しているものでなければなりません。

于 2009-11-20T16:40:02.717 に答える
2

同時クライアントが多すぎない場合は、おそらくリバース ajax が役立ちます。これは彗星と呼ばれることもあります。

リバース Ajax は、長寿命の HTTP 接続を使用して Web サーバーとブラウザー間の低レイテンシー通信を可能にする Ajax デザイン パターンを指します。基本的に、これはクライアントからサーバーにデータを送信する方法であり、サーバー データをブラウザーにプッシュするメカニズムです (必要なもの)。

http://en.wikipedia.org/wiki/Reverse_Ajax

それはあなたのニーズに合っているように聞こえます.私はちょうどそれを使用しました.

于 2009-08-26T11:11:00.813 に答える
0

非表示の (または小さい) iframe で実行時間の長いスクリプトを実行し、javascript を作成して iframe のコンテンツのみをチェックするのはどうですか? たとえば、スクリプトは ID を iframe の最後に書き込みます。

于 2009-08-26T11:00:04.720 に答える
0

あなたのオプション2は、まさに私が以前に行ったことです。setTimeout を使用して、ポーリングを 30 秒ごとに制限します。

于 2009-08-26T11:05:29.437 に答える
0

ICEfaces フレームワークは、AJAX プッシュテクノロジを提供します。Jetty、Tomcat、Glassfish などのさまざまなアプリケーション サーバーでスケーラブルな非同期要求処理をサポートします。

これはすべて Java に関するものですが、Google の適切な検索用語を見つけるのに役立つ場合があります。

于 2009-08-26T11:14:57.390 に答える