2017-06-19 18 views
-4

私は受信したHTTP要求の数を保持するサーバー内のカウンタが必要です。各サーバーは、特定の時点で複数の要求を非同期的に処理できます(同じコントローラがすべてのユーザーによって呼び出されます)。要求が行われるたびにカウンタを共有できるようにカウンタを配置します。どのようにコントローラがasp.net mvcで動作しますか?

+1

あなたはそれを試してみてはどうでしょうか?学習は、行うことです。あなたが立ち往生するまで質問しないでください。 – mason

+0

はい。複数のリクエスト間でデータを共有する場合は、セッションやデータベースストレージ、スタティック/シングルトンなどの永続的なメカニズムを考慮する必要があります – Shyju

+0

1つに4つの質問があります。 [ask]を読んで最初に検索し、質問ごとに1つの質問をしてください。 – CodeCaster

答えて

1

はい、コントローラーはインスタンス化され、要求ごとに処理されます。はい、それぞれのリクエストは独自のスレッドを取得しますが、そのスレッドは(非同期作業の場合)交換されるか、またはその存続期間にわたって複数のリクエストを処理できます。

並列性は複雑なトピックであり、任意の時点でのさまざまな要因に基づいています。しかし、単純にスレッドは並行して実行されます。しかし、彼らはお互いの間で(ほとんどの場合)リソースを共有しません。結局のところ、親プロセスを介していくつかのリソース共有がありますが、実際のアプリケーションでは、それらを冪等級とみなすべきです。

あなたのコードにカウンタを実装しようとしている設計の場合は、そのすべてと最終的な質問に基づいて、しないでください。それは動作しませんし、決してwill not。プロセスバインドされたスレッドセーフカウンタをいくらか調整することはできますが、それはワーカーでは機能せず、アプリケーションプールが何らかの理由でリサイクル、クラッシュ、または再起動するたびに強制終了されます。

カウンタは、データベースまたはその他の永続データストアに実装する必要があります。フルストップ。それでも、同時実行性には非常に注意する必要があります。ボットを除外したり、同じユーザーがページを繰り返し読み込んだりしない限り、カウントは何の関係もなくなります。

関連する問題