HTTPClientFactory 中释放 TCP 端口的机制如何?



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

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

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

这是因为每次使用 HttpClient 发出请求并在使用后处理它时,都会导致套接字处于TIME_WAIT状态,想象一下,如果您在几秒钟内发出数千个请求,您将用完套接字。IHttpClientFactory 是一个协定,用于更好地管理 Http 服务,并重用连接池中的套接字,而无需对其进行管理。

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

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

上面文章中的关键点之一,回答您关于IHttpClientFactory如何解决您的问题的问题,

每次从 IHttpClientFactory 获取 HttpClient 对象时,都会 返回新实例。但是每个 HttpClient 都使用 由 IHttpClientFactory 池化和重用的 HttpMessageHandler 以减少资源消耗,只要 HttpMessageHandler 的 生存期尚未过期。

希望这有帮助!

最新更新