【问题标题】:How many HttpClients should I create?我应该创建多少个 HttpClient?
【发布时间】:2014-06-04 17:19:39
【问题描述】:

最初我的代码在每个请求的 using 语句中创建了一个新的 HttpClient。然后看了几篇关于重用HttpClient提高性能的文章。

这是一篇此类文章的摘录:

我不建议在 Using 块中创建 HttpClient 来创建 单个请求。当 HttpClient 被处理时,它会导致底层 连接也要关闭。这意味着下一个请求必须 重新打开该连接。您应该尝试重新使用您的 HttpClient 实例。

http://www.bizcoder.com/httpclient-it-lives-and-it-is-glorious

在我看来,只有当多个请求连续发送到同一个地方(例如 www.api1.com)时,保持连接打开才有用。

我的问题是,我应该如何创建 HttpClients?

我的网站在后端涉及大约十种不同的服务。

我应该创建一个 HttpClient 供所有人使用,还是应该为我在后端使用的每个域创建一个单独的 HttpClient?

示例: 如果我访问 www.api1.com 和 www.api2.com,我应该创建 2 个不同的 HttpClient,还是只创建一个 HttpClient?

【问题讨论】:

  • 我认为this 可能会回答您的问题。

标签: c# dotnet-httpclient


【解决方案1】:

确实,HttpClient 的 Disposing 不会从连接池中强行关闭底层 TCP/IP 连接。您建议的最佳性能方案是:

  • 为您需要连接的每个后端服务或应用程序的生命周期保持一个 HttpClient 实例处于活动状态。

  • 根据您对后端服务的详细信息,您可能还希望该后端服务上的每个不同 API 都有一个客户端。 (同一域中的 API 可能会到处路由。)

【讨论】:

  • 如何在单个域上拥有多个端点,例如 www.api1.com/foo 和 www.api1.com/bar。单个 HttpClient 是否足以满足这些需求,或者 2 个是最佳的?
  • 我认为这取决于后端服务是如何实现的。似乎在大多数情况下,您不能保证同一个域中的 API 一定会路由到同一个地方。它也可能是跨服务器池或类似的路由。我认为你最好的选择是每个 API 的 HttpClient。
猜你喜欢
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
相关资源
最近更新 更多