HTTPClientFactory中释放TCP端口的机制是怎样的?
How is the mechanism of releasing TCP port in HTTPClientFactory?
在我当前的项目版本中,HttpClinet 已用于创建请求。但是在请求的高峰时间,我们的大多数 TCP 端口进入 等待状态,任务完成后它们的状态保持在大约 2 分钟事件。我读了一些关于 IHttpClientFactory 的文章。
但我不确定这个解决方案如何解决我们的问题。任何想法将不胜感激。
有很多文章可以告诉您为什么不应该处理 HttpClient(这会导致您提到的结果,并最终导致套接字耗尽问题),而是使用 IHttpClientFactory 来管理生命-HttpClient 相关服务的周期。
这是因为每次用 HttpClient 发出请求,并在使用后处理它,都会导致套接字处于 TIME_WAIT 状态,想象一下如果你在几秒钟内发出几千次请求,你会 运行 出套接字。 IHttpClientFactory 是一个合同,可以更好地管理您的 Http 服务,并在您无需管理的情况下重新使用连接池中的套接字。
首先,通过这个,我认为它提供了足够的信息。关于您想实现的目标,
上面文章的重点之一,回答你关于 IHttpClientFactory 如何解决你的问题的问题,
Each time you get an HttpClient object from the IHttpClientFactory, a
new instance is returned. But each HttpClient uses an
HttpMessageHandler that's pooled and reused by the IHttpClientFactory
to reduce resource consumption, as long as the HttpMessageHandler's
lifetime hasn't expired.
希望对您有所帮助!
在我当前的项目版本中,HttpClinet 已用于创建请求。但是在请求的高峰时间,我们的大多数 TCP 端口进入 等待状态,任务完成后它们的状态保持在大约 2 分钟事件。我读了一些关于 IHttpClientFactory 的文章。
但我不确定这个解决方案如何解决我们的问题。任何想法将不胜感激。
有很多文章可以告诉您为什么不应该处理 HttpClient(这会导致您提到的结果,并最终导致套接字耗尽问题),而是使用 IHttpClientFactory 来管理生命-HttpClient 相关服务的周期。
这是因为每次用 HttpClient 发出请求,并在使用后处理它,都会导致套接字处于 TIME_WAIT 状态,想象一下如果你在几秒钟内发出几千次请求,你会 运行 出套接字。 IHttpClientFactory 是一个合同,可以更好地管理您的 Http 服务,并在您无需管理的情况下重新使用连接池中的套接字。
首先,通过这个,我认为它提供了足够的信息。关于您想实现的目标,
上面文章的重点之一,回答你关于 IHttpClientFactory 如何解决你的问题的问题,
Each time you get an HttpClient object from the IHttpClientFactory, a new instance is returned. But each HttpClient uses an HttpMessageHandler that's pooled and reused by the IHttpClientFactory to reduce resource consumption, as long as the HttpMessageHandler's lifetime hasn't expired.
希望对您有所帮助!