5

Node.js、Tornado、Twistedなどのフレームワークを使用すると、開発者は、多数の同時ハングリクエスト(10k以上)をサポートするサーバープッシュアプ​​リケーションを作成できます。私が理解していることから、それらはすべて、ハングしている各要求を処理するスレッドを作成しないことによってこれを達成します。

AsyncControllerを使用して、多数の非アクティブな同時リクエストを処理できますか?

もしそうなら、このアプローチを使用してロングポールアプリケーションを作成する適度に大きなASP.NET MVC Webサイトはありますか?

4

2 に答える 2

6

AsyncControllerは、次の状況で(通常のコントローラーと比較して)役立ちます。

実行時間の長いタスクがあり、このタスクは通常、I / O完了ポートを使用して他の層(Webサービス、データベースなど)によって実行されます。。したがって、リクエストはワーカースレッドで開始され、IOCPを開くBeginXXXメソッドを呼び出します(サポートされている場合は、別のワーカースレッドを描画するだけなので、役に立たない場合)。ワーカースレッドはすぐにに返されます。スレッドプール。長い操作の実行中、サーバー上でワーカースレッドは消費されていません。完了すると、IOCPに信号を送り、非同期コントローラーはプールから別のスレッドを引き出して、要求を終了し、結果をビューに返します。ここで注意すべき点がいくつかあります。通常のコントローラーの代わりに非同期コントローラーを使用したという事実は、クライアントにまったく違いはありません。クライアントは、リクエストが完了するまで同じ時間待つ必要があります。非同期コントローラーを使用すると、低速の操作が高速になるという誤った印象を受けます。

要約すると、高速実行リクエストの場合、非同期コントローラーは通常のコントローラーと比較して何のメリットももたらしません。遅いリクエストの場合は可能ですが、長時間実行される操作の性質と、CPUまたはI/Oバウンドのどちらであるかによって異なります。CPUにバインドされたタスクの場合、非同期コントローラーもこれ以上役に立ちません。ただし、すべての場合において、アプリケーションで広範な負荷テストを実行する必要があります。

これは、ASP.NETでの非同期要求について説明しているMSDNに関する非常に優れた記事です。

そして、これは、非同期コントローラーを使用してロングポーリングを実装する方法を示すブログ投稿です。

于 2011-02-13T09:01:12.447 に答える
3

私は最近、Clay Lenhartのすばらしい記事に基づいて、MVC 3AsyncControllersを使用したLongPollingChat Serverの簡単な例を書きましたが、たくさんの接続で実際にテストする機会がありませんでした。

この例は、BitBucketプロジェクトのソースに基づいて設定したAppHarborデプロイメントで使用できます。

また、プロジェクトを説明している私のブログ投稿からより多くの情報を入手できます。

于 2011-04-13T14:30:51.977 に答える