2016-09-15 41 views
4

.NET 4.5でWebClient、HttpWebRequest、およびHttpClientクラスを使用して送信できる並行/並列要求の数に制限はありますか。または、Web APIまたはサーバーに制限がない場合、無制限の並列要求を送信できるのでしょうか? 申し訳ありませんが質問が広すぎる場合は、私はそれを絞り込むことができます私を修正してください。WebClient、HttpWebRequest、およびHttpClientの最大同時要求数

答えて

14

はい、制限があります。デフォルトの接続制限は、リモートホストあたり2つの同時接続です。これは無効にすることができます。たとえば、ASP.NETは既定でリモートホストごとに10の接続に既定を上書きすると考えています。

https://msdn.microsoft.com/en-us/library/7af54za5.aspxから:クライアントとサーバー間の接続の数は、アプリケーションのスループットに 劇的な影響を与える可能性があり

。既定では、HttpWebRequestクラスを使用するアプリケーション は、特定のサーバーへの接続を最大2つの永続的な 接続を使用しますが、アプリケーションごとに最大接続数を に設定できます。

自分で接続制限を変更するには、ServicePointManager.DefaultConnectionLimitを使用します。リモートホストへのHTTP接続を開始する前に、プロセスの起動後すぐにこれを変更してください。これは、実際にリモートホストへのHTTP接続を確立すると、現在のデフォルトの接続制限を使用してそのリモートホストに対してServicePointが作成されるためです。

同時接続には、HTTPクライアントクラス以外の有効な制限があります。たとえば、100万の同時接続を開こうとすると、RAM、スレッド、またはその他のOSリソースが不足する可能性があります。これらの限界にぶつかっているなら、.netプロセスをスケールアップして多くの同時I/Oを処理する方法について、より一般的な質問をする必要があります。しかし、数十の接続を開いているだけなら、大丈夫です。

なぜ、デフォルトの制限がそれほど低いのか不思議であれば、実際にはHTTP仕様に組み込まれています。目標は、利己的なHTTPクライアントがHTTPサーバを同時に接続していないことを保証することでした。現代のブラウザは仕様を無視していますが。あなたが今まで知りたいと思っていたよりも、このトピックに関する詳細については、http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/を参照してください!

+1

これはどのようにして.netコアで設定できますか? 'ServicePointManager'はもう存在しません –

+0

.NET Core 2.0にServicePointManagerが追加され、HttpClientに直接設定することもできます。私の答えはこちら:https://stackoverflow.com/questions/1361771/max-number-of-concurrent-httpwebrequests/46905342#46905342 – cbp

関連する問題