【问题标题】:How is the mechanism of releasing TCP port in HTTPClientFactory?HTTPClientFactory中释放TCP端口的机制是怎样的?
【发布时间】:2020-05-20 06:31:41
【问题描述】:

在我当前版本的项目中,HttpClinet 已用于创建请求。但是在请求的高峰期,我们的大部分 TCP 端口都处于等待状态,它们的状态在任务完成后保持大约 2 分钟事件。我阅读了一些关于 IHttpClientFactory 的文章。

但我不确定这个解决方案如何解决我们的问题。任何想法将不胜感激。

【问题讨论】:

  • 具体的状态是什么?时间的等待?这纯粹是操作系统设置的问题,应用程序已经关闭了连接,但 TCP 堆栈保持端口打开以捕获延迟的包。
  • excat 状态为 CLOSE_WAIT
  • 还有一些时候有Time_wait状态

标签: asp.net-core httpclient tcpclient httpclientfactory


【解决方案1】:

那里有大量文章会告诉您为什么不应该处置 HttpClient(这会导致您提到的问题,并最终导致套接字耗尽问题),而是使用 IHttpClientFactory 来管理生命周期的 HttpClient 相关服务。

这是因为你每次用HttpClient发起请求,并且在使用后dispose,都会导致socket处于TIME_WAIT状态,想象一下如果你在几秒内发出几千个请求,你会用完插座。 IHttpClientFactory 是一个契约,可以更好地管理您的 Http 服务,并在您无需管理的情况下重用连接池中的套接字。

首先,通过这个,我认为它提供了足够的信息。关于你想要达到的目标,

https://docs.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests

上面文章的重点之一,就是回答你关于IHttpClientFactory如何解决你的问题的问题,

每次从 IHttpClientFactory 获得一个 HttpClient 对象时, 返回新实例。但是每个 HttpClient 使用一个 由 IHttpClientFactory 汇集和重用的 HttpMessageHandler 减少资源消耗,只要 HttpMessageHandler 的 生命周期尚未过期。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    相关资源
    最近更新 更多