PoolingClientConnectionManager 中的“per route based”是啥意思?

Posted

技术标签:

【中文标题】PoolingClientConnectionManager 中的“per route based”是啥意思?【英文标题】:What is the meaning of "per route basis" in PoolingClientConnectionManager?PoolingClientConnectionManager 中的“per route based”是什么意思? 【发布时间】:2012-08-15 06:00:46 【问题描述】:

ThreadSafeClientConnManager 已弃用,并引入了一种新方法PoolingClientConnectionManager。

PoolingClientConnectionManager 的文档说

管理客户端连接池并能够为连接提供服务 来自多个执行线程的请求。连接汇集在一个 以每条路线为基础。

我的问题

这里per route based是什么意思?

【问题讨论】:

【参考方案1】:

指的是HttpRoute。 HttpRoute 是用来描绘在同一个 Web 服务器上运行的多个应用程序。

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/routing/HttpRoute.html

它的用法如下:

ClientConnectionRequest connRequest = connMrg.requestConnection(
        new HttpRoute(new HttpHost("localhost", 80)), null);
ManagedClientConnection conn = connRequest.getConnection(10, TimeUnit.SECONDS);
try 
    BasicHttpRequest request = new BasicHttpRequest("GET", "/");
    conn.sendRequestHeader(request);
    HttpResponse response = conn.receiveResponseHeader();
    conn.receiveResponseEntity(response);
    HttpEntity entity = response.getEntity();
    if (entity != null) 
        BasicManagedEntity managedEntity = new BasicManagedEntity(entity, conn, true);
        // Replace entity
        response.setEntity(managedEntity);
    
    // Do something useful with the response
    // The connection will be released automatically 
    // as soon as the response content has been consumed
 catch (IOException ex) 
    // Abort connection upon an I/O error.
    conn.abortConnection();
    throw ex;

来源:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html

【讨论】:

用更简单的语言进行更多解释将使答案对更广泛的受众有用。【参考方案2】:

简单来说,每条路由意味着您要连接的每台主机。

PoolingHttpClientConnectionManager 在每条路由的基础上保持最大连接数限制。默认情况下,此实现将为每个给定路由创建不超过 2 个并发连接,并且总共不超过 20 个连接。

【讨论】:

以上是关于PoolingClientConnectionManager 中的“per route based”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章