我应该创建多少个HttpClients?

6
原本我的代码在每个请求中都使用 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个不同的HttpClients,还是仅创建一个HttpClient?


2
我认为 这个 或许能够回答你的问题。 - mbeckish
1个回答

5

事实上,销毁HttpClient不会强制关闭来自连接池的底层TCP/IP连接。您最好的性能方案是如您所建议的:

  • 为每个需要连接到的后端服务保留一个HttpClient实例或者针对应用程序的生命周期。

  • 根据您了解的有关后端服务的详细信息,您可能还需要为该后端服务上的每个不同API拥有一个客户端。(同一域中的API可能会路由到各个地方。)


1
我认为这取决于后端服务的实现方式。在大多数情况下,你无法保证同一域中的API一定会路由到相同的位置。它还可能会路由到服务器池或类似的地方。我认为你最好为每个API使用一个HttpClient。 - tezromania

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接