使用.NET 4.5中的WebClient,HttpWebRequest和HttpClient类可以发送多少并发/并行请求是否有限制?或者,如果对Web API或服务器没有限制,您是否可以发送无限制的并行请求? 对不起,如果问题太广泛,请纠正我,以便缩小范围。
答案 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/,而不是您想知道的事情!