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

问题描述 投票:0回答:2

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

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

c# http .net-core
2个回答
2
投票

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

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

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

ServicePointManager.DefaultConnectionLimit = 100;

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

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

HttpClient client = new HttpClient(handler);

这样,您可以为每个目标服务设置不同的限制。

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

你会惊讶于一些据称高流量服务的表现。如果超过一分钟的并发请求超过10个,我遇到的航空公司服务可能会崩溃。配置不当的负载均衡器仍会将流量引导至这些崩溃的服务至少1-2分钟,直到服务重新启动,使重试无意义。


0
投票

请参阅Todd's answer,因为这是一个类似的案例。通常,您有ServicePointManager.DefaultConnectionLimit来更改限制。我也鼓励你这样做非常谨慎,因为你也可以达到Ephemeral port限制或在目标服务器上创建高负载。

© www.soinside.com 2019 - 2024. All rights reserved.