有人可以向我解释一下setMaxPerRoute(max)
和 setMaxTotal(max)
对HttpComponents PoolingHttpClientConnectionManager的参考吗?
答案 0 :(得分:21)
这些设置控制连接池大小。
setMaxTotal(max)
定义连接池的总连接限制。setMaxPerRoute(max)
定义每条HTTP路由的连接限制。在简单的情况下,您可以将其理解为每个目标主机限制。事情更有趣:HttpClient
维护了几个HttpRoute
个对象,它们代表每个主机链,如proxy1 -> proxy2 -> targetHost
。连接按路由汇集。在简单的情况下,当您使用默认路由构建机制并且不提供代理支持时,您的路由可能仅包括目标主机,因此每个路由连接池限制实际上变为每个主机限制。示例:强>
假设您有setMaxPerRoute(5)
和setMaxTotal(20)
。这意味着您可以同时为每个目标主机使用最多5个连接:5个与google.com的连接,另外5个与oracle.com的连接,依此类推。但是,无论您正在与之通信的主机数量是多少,打开的连接总数都不能超过20个。