繁体   English   中英

如何增加 .NET Core 中的传出 HTTP 请求配额?

[英]How to increase the outgoing HTTP requests quota in .NET Core?

我正在尝试从机器发送大量 HTTP 请求。 但似乎 .NET Core 或我不知道的 Windows 正在限制可以发出的并发 HTTP 请求的数量,或者给定时间段内 HTTP 请求的配额。

我怎样才能增加这个? 我记得我们在 .NET Framework 中有一个配置,但我也找不到。

HTTP 1.1 协议建议每个域只应发出 2 个并发请求。 .NET Framework 和 .NET Core 都将此限制用于桌面应用程序。 ASP.NET 应用程序有 10 个并发请求的限制。 两个运行时都允许您更改限制。

这个限制在不久前对浏览器来说是有意义的,但对于面向服务的应用程序来说限制太大了。 现在浏览器允许大约 8 个并发连接,服务/REST 应用程序可以处理更多。

ServicePointManager.DefaultConnectionLimit可用于更改整个应用程序的限制,例如:

ServicePointManager.DefaultConnectionLimit = 100;

您还可以指定每个HttpClient实例的限制,方法是使用HttpClientHandler并将HttpClientHandler.MaxConnectionsPerServer属性设置为所需的限制:

var handler = new HttpClientHandler
{
    MaxConnectionsPerServer= 100,
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate
};

HttpClient client = new HttpClient(handler);

通过这种方式,您可以为每个目标服务设置不同的限制。

不要急于将限制设置为一个巨大的数字 目标服务可能无法处理来自同一客户端的 20 或 40 个并发请求。 写得不好的服务可能会导致服务器崩溃或泛滥。 并发请求可能会相互阻塞,降低实际吞吐量。 编写好的服务可能会对每个客户端或队列请求施加速率限制。

您会惊讶于一些所谓的高流量服务的行为有多糟糕 我遇到过如果在一分钟内发出超过10 个并发请求,航空公司服务可能会崩溃。 配置不当的负载均衡器仍会将流量定向到那些崩溃的服务至少 1-2 分钟,直到服务重新启动,使重试毫无意义。

请参阅托德的回答,因为这是一个类似的案例。 通常你有 ServicePointManager.DefaultConnectionLimit 来改变限制。 我还鼓励您非常谨慎地执行此操作,因为您还可能达到临时端口限制或在目标服务器上创建高负载。

暂无
暂无

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

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