WebClient、HttpWebRequest 和 HttpClient 的最大并发请求数

Maximum concurrent requests for WebClient, HttpWebRequest, and HttpClient

在 .NET 4.5 中使用 WebClient、HttpWebRequest 和 HttpClient class 可以发送多少个 concurrent/parallel 请求有限制吗?还是在webAPI和服务器没有限制的情况下可以发送无限的并行请求? 抱歉,如果问题太宽泛,请纠正我,以便我缩小范围。

是的,有一个限制。默认连接限制是每个远程主机 2 个并发连接。这可以被覆盖。例如,我相信 ASP.NET 默认情况下会覆盖每个远程主机 10 个连接的默认值。

来自 https://msdn.microsoft.com/en-us/library/7af54za5.aspx

The number of connections between a client and server can have a dramatic impact on application throughput. By default, an application using the HttpWebRequest class uses a maximum of two persistent connections to a given server, but you can set the maximum number of connections on a per-application basis.

要自己更改连接限制,请使用 ServicePointManager.DefaultConnectionLimit. Make sure to make this change soon after your process starts up, before you start making HTTP connections to the remote host. This is because because once you actually make an HTTP connection to a remote host, then a ServicePoint 将为使用当前默认连接限制的远程主机创建。

请注意,除 HTTP 客户端 类 强制执行的限制外,还有其他对并发连接的有效限制。例如,如果您想打开一百万个并发连接,您可能 运行 RAM、线程或其他一些 OS 资源。如果您遇到这些限制,那么您将需要提出另一个更一般的问题,即如何扩展 .net 进程以处理大量并发 I/O。但是,如果您只打开几十个连接,那么您应该没问题。

顺便说一句,如果您对为什么默认限制如此之低感到好奇,它实际上已经融入了 HTTP 规范——目标是确保自私的 HTTP 客户端不会淹没同时连接的 HTTP 服务器。尽管现代浏览器忽略了规范。有关此主题的更多详细信息,请参阅 http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/