Che*_*hen 10 .net webclient http httpclient httpwebrequest
在.NET 4.5中使用WebClient,HttpWebRequest和HttpClient类可以发送多少并发/并行请求是否有限制?或者,如果对Web API或服务器没有限制,您是否可以发送无限制的并行请求?对不起,如果问题太广泛,请纠正我,以便缩小范围.
Jus*_*ant 20
是的,有一个限制.默认连接限制是每个远程主机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/,而不是您想知道的!