有人可以参考 HttpComponents PoolingHttpClientConnectionManager向我解释什么setMaxPerRoute(max)
和做什么吗? setMaxTotal(max)
问问题
12834 次
1 回答
39
这些设置控制连接池大小。
setMaxTotal(max)
定义连接池的总连接限制。setMaxPerRoute(max)
定义每个 HTTP 路由的连接限制。在简单的情况下,您可以将其理解为每个目标主机的限制。幕后的事情更有趣:HttpClient
维护几个HttpRoute
对象,每个对象代表一个主机链,例如proxy1 -> proxy2 -> targetHost
. 连接在每条路由的基础上进行池化。在简单的情况下,当您使用默认路由构建机制并且不提供代理支持时,您的路由可能仅包含目标主机,因此每个路由连接池限制实际上变成了每个主机限制。
例子:
假设你有setMaxPerRoute(5)
和setMaxTotal(20)
。这意味着您可以同时为每个目标主机使用最多 5 个连接:5 个与 google.com 的连接,另外 5 个与 oracle.com 的连接,依此类推。但是,无论您正在与之通信的主机数量如何,打开的连接总数都不能超过 20。
于 2013-10-13T16:24:30.807 回答