Java HttpComponents池HttpClientConnectionManager maxPerRoute和maxTotal?

Java HttpComponents池HttpClientConnectionManager maxPerRoute和maxTotal?,java,multithreading,apache-httpcomponents,Java,Multithreading,Apache Httpcomponents,有人能给我解释一下关于HttpComponents PoolighttpClientConnectionManager,setMaxPerRoute(max)和setMaxTotal(max)做了什么吗?这些设置控制连接池的大小 setMaxTotal(max)定义连接池的总体连接限制 setMaxPerRoute(max)定义了每个HTTP路由的连接限制。在简单的情况下,您可以将其理解为每个目标主机的限制。幕后的事情更有趣一些:HttpClient维护了两个HttpRoute对象,它们分别表

有人能给我解释一下关于HttpComponents PoolighttpClientConnectionManager,setMaxPerRoute(max)和setMaxTotal(max)做了什么吗?

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

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


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

谢谢,这非常有帮助。
maxPerRoute
是否有限制?由于我将尝试使用大约150个线程从同一个网站(数万个)请求大量URL,而不是在HttpClient中,客户端与单个主机有150个连接是完全可以的。但请记住,该服务器可能不允许从单个客户端进行如此多的连接,这取决于服务器配置。很抱歉打扰您,但是您自己使用HttpComponents吗?是的,我当前的项目大量使用HttpComponents。您介意我问您一些关于它和最佳实践的问题吗?