1

現在のasp.netアプリケーションでAsyncHttpHandlersを使用して彗星を実装しています。私の実装によると、クライアントは最初に通知フック要求を AsyncHttpHandler でサーバーに (そのユーザー ID とともに) 送信し、サーバー側では、ユーザー ID (キー) と IAynsResult (値) のグローバル (アプリケーション レベル) ディクショナリを維持します。そのため、ユーザーに通知を送信する要求が受信されるたびに、グローバル ディクショナリから一致する IAsyncResult を選択し、クライアント ユーザーに応答を送信します。

私の懸念は、ユーザー ID と IAsyncResult のディクショナリをアプリケーション レベルで維持することは適切な設計でしょうか? トラフィックが多いときは、サーバーに多くの負荷がかかると思います。彗星を達成できる他の方法はありますか?または、交通量の多いシナリオでコメットを実現するための優れた設計は何でしょうか。

4

1 に答える 1

1

これは、サーバーへのリクエストの数に依存します。IAsyncResult リクエストは、ThreadPoolワーカー スレッドの数を自動的に管理するプロセスを利用します。これらのスレッドにはタスクが割り当てられ、完了まで実行された後、再利用のために ThreadPool に戻されます。

ThreadPool は .NET の他の側面で使用され、限られた数のスレッドを提供します。使いすぎると、他の人が完了するのを待ってタスクがブロックされる可能性があります。

基本的に、ASP.net でコメット サーバーを実行するには、強力なハードウェアか、複数のサーバーにアプリケーションを分散する必要があります。

HTML5 WebSocketをお勧めします。これは、HTML でソケットを実装するためのW3C APIであり、ASP.net サーバーでのセットアップが簡単です。

.net 4 の SignalR

.net 4.5 用の ASP.net WebSocket API

于 2012-04-06T07:37:14.537 に答える