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

时间:2016-09-15 17:00:13

标签: .net http httpwebrequest httpclient webclient

使用.NET 4.5中的WebClient,HttpWebRequest和HttpClient类可以发送多少并发/并行请求是否有限制?或者,如果对Web API或服务器没有限制,您是否可以发送无限制的并行请求? 对不起,如果问题太广泛,请纠正我,以便缩小范围。

1 个答案:

答案 0 :(得分:19)

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

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

  

客户端和服务器之间的连接数可以有   对应用程序吞吐量的巨大影默认情况下,应用程序   使用HttpWebRequest类最多使用两个持久化   与给定服务器的连接,但您可以设置最大数量   基于每个应用程序的连接。

要自行更改连接限制,请使用ServicePointManager.DefaultConnectionLimit。在开始建立与远程主机的HTTP连接之前,请确保在进程启动后立即进行此更改。这是因为一旦您实际建立到远程主机的HTTP连接,那么将使用当前的默认连接限制为该远程主机创建ServicePoint

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

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