在我当前版本的项目中,HttpClinet已用于创建请求。但是在请求的高峰期,我们的大部分 TCP 端口都处于等待状态,它们的状态在任务完成后保持大约 2 分钟事件。我读了一些关于IHttpClientFactory的文章。
但我不确定这个解决方案如何解决我们的问题。任何想法将不胜感激。
在我当前版本的项目中,HttpClinet已用于创建请求。但是在请求的高峰期,我们的大部分 TCP 端口都处于等待状态,它们的状态在任务完成后保持大约 2 分钟事件。我读了一些关于IHttpClientFactory的文章。
但我不确定这个解决方案如何解决我们的问题。任何想法将不胜感激。
那里有大量文章会告诉您为什么不应该处理 HttpClient (这会导致您提到的问题,并最终导致套接字耗尽问题),而是使用 IHttpClientFactory 来管理 HttpClient 的生命周期-相关服务。
这是因为每次使用 HttpClient 发出请求,并在使用后将其丢弃,都会导致套接字处于 TIME_WAIT 状态,想象一下如果您在几秒钟内发出数千个请求,您将用完套接字。IHttpClientFactory 是一个契约,用于更好地管理您的 Http 服务,并在您不必管理它的情况下重用连接池中的套接字。
首先,通过这个,我认为它提供了足够的信息。关于你想要达到的目标,
上面文章中的关键点之一,回答您关于 IHttpClientFactory 如何解决您的问题的问题,
每次从 IHttpClientFactory 获取 HttpClient 对象时,都会返回一个新实例。但是每个 HttpClient 使用一个由 IHttpClientFactory 汇集和重用的 HttpMessageHandler 来减少资源消耗,只要 HttpMessageHandler 的生命周期没有过期。
希望这可以帮助!