【问题标题】:How to increase the outgoing HTTP requests quota in .NET Core?如何增加 .NET Core 中的传出 HTTP 请求配额?
【发布时间】:2019-03-27 08:04:49
【问题描述】:

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

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

【问题讨论】:

  • 你能把你的配置贴在.net框架中
  • 正如我所说,我现在在 .NET Core 中工作。
  • 你说配置是在.net framework中工作的,我想看看配置帮助你映射到.net core。
  • @MohammadAlghanem .NET 配置不会影响可以发出多少并发请求。
  • 在 .net core 中对并发连接数没有限制。

标签: c# http .net-core concurrency


【解决方案1】:

HTTP 1.1 协议建议每个域只能发出 2 个并发请求。 .NET Framework 和 .NET Core 都将此限制用于桌面应用程序。 ASP.NET 应用程序有 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 分钟,直到服务重新启动,从而使重试毫无意义。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      相关资源
      最近更新 更多