有人可以给我解释一下HttpComponents PoolingHttpClientConnectionManager的setMaxPerRoute(max) setMaxTotal(max)吗?

最佳答案

这些设置控制连接池的大小。

  • setMaxTotal(max)定义连接池的总体连接限制。
  • setMaxPerRoute(max)定义每条HTTP路由的连接限制。在简单的情况下,您可以将其理解为每个目标主机的限制。在幕后,事情变得更加有趣:HttpClient维护了几个HttpRoute对象,它们分别代表一个主机链,例如proxy1 -> proxy2 -> targetHost。连接是按路由池化的。在简单的情况下,当您使用默认的路由构建机制并且不提供代理支持时,您的路由可能仅包含目标主机,因此按路由的连接池限制实际上将变为按主机的限制。

  • 示例:

    假设您有setMaxPerRoute(5)setMaxTotal(20)。这意味着您可以同时为每个目标主机最多使用5个连接:与google.com的5个连接,与oracle.com的另外5个连接,依此类推。但是,无论您要与之通信的主机数量是多少,打开的连接总数都不能超过20。

    07-24 19:31