在 .NET 4.5 中使用 WebClient、HttpWebRequest 和 HttpClient 类发送的并发/并行请求数量是否有限制?或者,如果
在 .NET 4.5 中,使用 WebClient、HttpWebRequest 和 HttpClient 类发送的并发/并行请求数量是否有限制?或者,如果 Web API 或服务器没有限制,您是否可以发送无限的并行请求?抱歉,如果问题太宽泛,请纠正我,以便我缩小范围。
是的,有限制。默认连接限制是每个远程主机 2 个并发连接。这可以被覆盖。例如,我相信 ASP.NET 默认会覆盖默认设置,即每个远程主机 10 个连接。
来自 https://msdn.microsoft.com/en-us/library/7af54za5.aspx :
客户端和服务器之间的连接数会对应用程序吞吐量产生巨大影响。默认情况下,使用 HttpWebRequest 类的应用程序最多使用两个与给定服务器的持久连接,但您可以根据每个应用程序设置最大连接数。
要自行更改连接限制,请使用 使用当前默认连接限制为该远程主机创建Manager.DefaultConnectionLimit
。请确保在进程启动后、开始与远程主机建立 HTTP 连接之前立即进行此更改。这是因为,一旦您实际与远程主机建立 HTTP 连接,就会 ServicePoint
ServicePoint
请注意,除了 HTTP 客户端类强制执行的限制之外,并发连接还有其他有效限制。例如,如果您想打开一百万个并发连接,则可能会耗尽 RAM、线程或其他操作系统资源。如果您遇到了这些限制,那么您需要问另一个更一般的问题,即如何扩展 .net 进程以处理大量并发 I/O。但如果您只打开几十个连接,那么您应该没问题。
顺便说一句,如果您好奇为什么默认限制如此之低,其实这是 HTTP 规范中规定的——目标是确保自私的 HTTP 客户端不会用同时连接淹没 HTTP 服务器。尽管现代浏览器忽略了该规范。请参阅 http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/ 了解有关此主题的更多详细信息,比您想知道的还要多!