繁体   English   中英

HttpClient中有多少个连接

[英]How many connections in HttpClient

背景

我必须从互联网上下载大约16k文件和相同数量的html页面。 这个数字将来会增加。 目前我只是使用Parallel.ForEach下载和处理数据。 然而,这似乎并没有充分利用我的资源,因此我计划将async/await用于播放,以尽可能多地异步运行下载,但我可能不得不限制它。

实际问题

一个HttpClient有多少个开放连接? 在创建如此多的连接时,我还需要记住哪些因素? 我知道我应该重用相同的HttpClient并且我也已经阅读了这个答案 ,但我怀疑我是否真的可以同时打开几十亿个连接。

首先,好好调用从Parallel.ForEach切换到async/await 通过打破线程的约束,您将能够将并发性提高几个数量级。

我怀疑我一次可以打开几十亿个连接。

让我们说你可以。 你认为这项工作会比你曾经一次打开1000更快地完成吗? 您首先遇到的限制是带宽(或可能是服务器拒绝请求),而不是并发连接。 因此,如果您的目标是尽快完成工作,我建议您可以立即打开的最大连接数甚至不相关。

也就是说,.NET存在默认限制。 假设您使用的是完整框架或.NET Core 2.x,则可以通过ServicePointManager.DefaultConnectionLimit以编程方式更改限制,其默认值为2.将其设置为更大的值。

接下来,我建议使用SemaphoreSlim或TPL Dataflow设置代码,以便同时执行下载到某个限制。 这个问题的答案都很好地涵盖了这两种方法。 然后开始尝试,直到你想出一个最佳数字。 很难说这是什么。 也许从50开始。如果进展顺利,将其增加到100,看看整个工作是否完成得更快。 如果您开始从服务器返回套接字异常或错误,请将其拨入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM