2011-11-04 27 views
0

サーバー上で発生したイベントに関する通知をユーザーに表示するWebサイトを実装したいと考えています。私の計画は次のとおりです。大量の保留中の要求を処理する方法

  1. イベントがこれらの600秒サーバの時間間隔でサーバー上に発生した場合、600秒のタイムアウト
  2. を持つことになり、サーバへの非同期要求(ASP.NET)を作るために
  3. イベントが発生していない場合は、サーバーは600秒後に「イベントなし」応答を送信します。
  4. JSは、サーバーからのフィードバックを受けて応答を処理し、次のメッセージを送信します要求。

このアプローチの問題は、訪問者の大量のWebサイトには「保留中」のリクエストがたくさんあることです。

質問

は、私が問題のようにすることを考えるべきでしょうか?そのための解決策は何ですか?おそらく私は別のアプローチを実装する必要がありますか?

フィードバックをお寄せください。

答えて

0

サーバリソースを10分かけて消費しないように頻繁にリクエストすることは可能でしょうか?

60秒程度ごとにAJAXリクエストを送信し、イベントが発生したかどうかを返します。欠点は、ユーザーが何らかのイベントについての通知を見るのに1分ほどかかることがあるため、それが多少なりとも必要な場合は、それが問題になります。

すぐにする必要がある場合は、node.jsのようなもので「長いポーリング」を検討しているようですが、実装するのは簡単ではありますが解決策になるかもしれません。

+1

__is__は基本的に長いポーリングを記述していますが、node.jsに限定されるわけではありません。 – Na7coldwater

+0

GregL、あなたが示唆しているのは実際には回避策です。私は頻繁なリクエストを行うという考えも考えましたが、あまり好きではありません。しかし、あなたの答えに感謝します。 – Budda

1

私は保留中のリクエストのasp.netの処理について詳しくは分かりませんが、あなたが書いていることは基本的に長いポーリングです。 (

  • 各保留中の要求は、スレッドを消費し、あなたが十分な接続を持っている場合は、それらのスレッド
  • のそれぞれに状態を保存する必要がありますありません:それはを含むがこれらに限定されない多くの理由トリッキーです必然的に多くのこと、上記を参照)、複数のマシンにまたがる必要があります。そして、それらのマシン間でエンドポイントを配布するためのアーキテクチャーを作り、各要求が正しいマシンに送られるようにする必要があります。すべてのユーザーに同じデータをブロードキャストするだけの場合は、これがはるかに簡単になります。
  • プロキシやISP、またはあなたが長時間の投票要求を停止する可能性があります。それに耐えうるアーキテクチャが必要です。

ここでは、asp.netの長いポーリングに関する質問があります。How to do long-polling AJAX requests in ASP.NET MVC?これはおそらく開始するのに適しています。

また、pusherのようなサードパーティのサービス、または(免責:私はApp Engineで動作する)App EngineのChannel APIを考慮して、これらの接続を処理することができます。

+0

こんにちはMoishe、あなたの答えに感謝します。あなたはそれを避けるための良いアイデアを見ていますか?いくつかのグーグルの後、私は記事(http://query7.com/avoiding-long-polling)を見つけましたが、実際には私の質問に答えていません... – Budda

+0

リアルタイムアップデートが必要な場合は、ポーリング、ロングポーリング、または(現代のブラウザを想定することができれば)ウェブソケットを使用します。この機能が時間と費用の価値があるかどうかについては、コストメリットを求めるだけです。 –

関連する問題