org.apache.http.impl.conn

## Class PoolingHttpClientConnectionManager

- java.lang.Object
- - org.apache.http.impl.conn.PoolingHttpClientConnectionManager

- All Implemented Interfaces:
    Closeable ， AutoCloseable ， HttpClientConnectionManager ， ConnPoolControl < HttpRoute >

      @Contract(threading=SAFE_CONDITIONAL)
      public class PoolingHttpClientConnectionManager
      extends Object
      implements HttpClientConnectionManager, ConnPoolControl<HttpRoute>, Closeable

  `ClientConnectionPoolManager`保持池`HttpClientConnection`个 S和能够服务从多个执行线程的连接请求。 连接按每个路线合并。 对于已经具有持续连接以在池中可用的路由的请求将是通过从池中租用连接而不是创建全新连接来进行的服务。

  `ClientConnectionPoolManager`在每个路由基础上和总共维护连接的最大限制。 默认情况下，此实施方案将在每个给定路由上创建不超过2个并发连接，并且不再有20个连接。 对于许多现实世界的应用程序，这些限制可能被证明是太限制的，特别是如果他们使用HTTP作为其服务的传输协议。 然而，连接限制可以使用`ConnPoolControl`方法进行调整。

  在施工时设置的总生存时间（TTL）定义持久连接的最大使用寿命，而不管其到期设置如何。 没有持续连接将重新使用超过其TTL值。

  版本4.4中更改了过时连接的处理。 以前，代码将在重新使用之前默认检查每个连接。 如果从上一次使用连接起的时间超过已设置的超时时，代码现在只检查连接。 默认超时设置为2000ms

  从以下版本开始：
    4.3

- - ### 构造方法摘要

    构造方法
    Constructor and Description
    `PoolingHttpClientConnectionManager()`
    `PoolingHttpClientConnectionManager(HttpClientConnectionOperator httpClientConnectionOperator, HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory, long timeToLive, TimeUnit tunit)`
    `PoolingHttpClientConnectionManager(HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory)`
    `PoolingHttpClientConnectionManager(long timeToLive, TimeUnit tunit)`
    `PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry)`
    `PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry, DnsResolver dnsResolver)`
    `PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry, HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory)`
    `PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry, HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory, DnsResolver dnsResolver)`
    `PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry, HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory, SchemePortResolver schemePortResolver, DnsResolver dnsResolver, long timeToLive, TimeUnit tunit)`

  - ### 方法摘要

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `close()`
    `void` | `closeExpiredConnections()` 关闭池中的所有过期连接。
    `void` | `closeIdleConnections(long idleTimeout, TimeUnit tunit)` 关闭池中的空闲连接。
    `void` | `connect(HttpClientConnection managedConn, HttpRoute route, int connectTimeout, HttpContext context)` 在直接路由的情况下将底层连接套接字连接到连接目标，或者通过代理（或多个代理）路由时将第一个代理跳转到第一个代理跳转。
    `protected void` | `enumAvailable(PoolEntryCallback<HttpRoute,ManagedHttpClientConnection> callback)`
    `protected void` | `enumLeased(PoolEntryCallback<HttpRoute,ManagedHttpClientConnection> callback)`
    `protected void` | `finalize()`
    `ConnectionConfig` | `getConnectionConfig(HttpHost host)`
    `ConnectionConfig` | `getDefaultConnectionConfig()`
    `int` | `getDefaultMaxPerRoute()`
    `SocketConfig` | `getDefaultSocketConfig()`
    `int` | `getMaxPerRoute(HttpRoute route)`
    `int` | `getMaxTotal()`
    `Set<HttpRoute>` | `getRoutes()`
    `SocketConfig` | `getSocketConfig(HttpHost host)`
    `PoolStats` | `getStats(HttpRoute route)`
    `PoolStats` | `getTotalStats()`
    `int` | `getValidateAfterInactivity()`
    `protected HttpClientConnection` | `leaseConnection(Future<org.apache.http.impl.conn.CPoolEntry> future, long timeout, TimeUnit tunit)`
    `void` | `releaseConnection(HttpClientConnection managedConn, Object state, long keepalive, TimeUnit tunit)` 将连接释放给管理员，使其可以由其他用户重新使用。
    `ConnectionRequest` | `requestConnection(HttpRoute route, Object state)` 返回新的`ConnectionRequest` ，从中可以获得`HttpClientConnection`或请求可以中止。
    `void` | `routeComplete(HttpClientConnection managedConn, HttpRoute route, HttpContext context)` 将连接标记为完全建立，并完成所有中间跳。
    `void` | `setConnectionConfig(HttpHost host, ConnectionConfig connectionConfig)`
    `void` | `setDefaultConnectionConfig(ConnectionConfig defaultConnectionConfig)`
    `void` | `setDefaultMaxPerRoute(int max)`
    `void` | `setDefaultSocketConfig(SocketConfig defaultSocketConfig)`
    `void` | `setMaxPerRoute(HttpRoute route, int max)`
    `void` | `setMaxTotal(int max)`
    `void` | `setSocketConfig(HttpHost host, SocketConfig socketConfig)`
    `void` | `setValidateAfterInactivity(int ms)` 定义不活动的时间（以毫秒为单位），之后必须重新验证持久连接，然后 再向客户发送 `leased` 。
    `void` | `shutdown()` 关闭此连接管理器并释放分配的资源。
    `void` | `upgrade(HttpClientConnection managedConn, HttpRoute route, HttpContext context)` 在将所有中间代理跳数执行 `CONNECT`方法后，将底层连接套接字升级到TLS / SSL（或其他分层协议）

    - ### Methods inherited from class java.lang.Object

      `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 构造方法详细信息

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager()

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(long timeToLive,
                                            TimeUnit tunit)

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry)

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                            DnsResolver dnsResolver)

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                            HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory)

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory)

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                            HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory,
                                            DnsResolver dnsResolver)

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(Registry<ConnectionSocketFactory> socketFactoryRegistry,
                                            HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory,
                                            SchemePortResolver schemePortResolver,
                                            DnsResolver dnsResolver,
                                            long timeToLive,
                                            TimeUnit tunit)

    - #### PoolingHttpClientConnectionManager

          public PoolingHttpClientConnectionManager(HttpClientConnectionOperator httpClientConnectionOperator,
                                            HttpConnectionFactory<HttpRoute,ManagedHttpClientConnection> connFactory,
                                            long timeToLive,
                                            TimeUnit tunit)

      从以下版本开始：
        4.4

  - ### 方法详细信息

    - #### finalize

          protected void finalize()
                           throws Throwable

      重写：
        `finalize`在 `Object`
      异常
        `Throwable`

    - #### close

          public void close()

      Specified by:
        `close`在接口 `Closeable`
      Specified by:
        `close`在接口 `AutoCloseable`

    - #### requestConnection

          public ConnectionRequest requestConnection(HttpRoute route,
                                            Object state)

      描述从接口`HttpClientConnectionManager`复制
      返回一个新的`ConnectionRequest` ，从中可以获得`HttpClientConnection`或请求可以中止。

      请注意，新分配的连接可以在关闭状态返回。 该连接的消费者负责通过呼叫`connect`完全建立到连接目标的路由 ，以便直接连接到目标或第一代理跳，可选地，在已经执行`CONNECT`方法之后，呼叫`upgrade`方法来升级连接中间代理跳，最后呼叫`routeComplete`将路由标记为完全完成。

      Specified by:
        `requestConnection`在接口 `HttpClientConnectionManager`
      参数
        `route` - 所请求连接的HTTP路由。
        `state` - 连接的预期状态或 `null`如果连接不预期携带任何状态。

    - #### leaseConnection

          protected HttpClientConnection leaseConnection(Future<org.apache.http.impl.conn.CPoolEntry> future,
                                             long timeout,
                                             TimeUnit tunit)
                                                  throws InterruptedException,
                                                         ExecutionException,
                                                         ConnectionPoolTimeoutException

      异常
        `InterruptedException`
        `ExecutionException`
        `ConnectionPoolTimeoutException`

    - #### releaseConnection

          public void releaseConnection(HttpClientConnection managedConn,
                               Object state,
                               long keepalive,
                               TimeUnit tunit)

      说明从接口`HttpClientConnectionManager`复制
      将连接释放给管理员，使其可以由其他用户重新使用。 可选地，可以使用`validDuration`和`timeUnit`参数来定义管理员保持连接活动的`validDuration` `timeUnit` 。
      Specified by:
        `releaseConnection`在接口 `HttpClientConnectionManager`
      参数
        `managedConn` - 要发布的受管连接。
        `keepalive` - 此连接有效重用的持续时间。
        `tunit` - 时间单位。
      另请参见：
        `HttpClientConnectionManager.closeExpiredConnections()`

    - #### connect

          public void connect(HttpClientConnection managedConn,
                     HttpRoute route,
                     int connectTimeout,
                     HttpContext context)
                       throws IOException

      描述从接口`HttpClientConnectionManager`复制
      在直接路由的情况下将底层连接套接字连接到连接目标，或者通过代理（或多个代理）路由时将第一个代理跳转到第一个代理跳转。
      Specified by:
        `connect`在接口 `HttpClientConnectionManager`
      参数
        `managedConn` - 受管连接。
        `route` - 连接的路由。
        `connectTimeout` - 以毫秒为单位的连接超时。
        `context` - 实际的HTTP上下文。
      异常
        `IOException`

    - #### upgrade

          public void upgrade(HttpClientConnection managedConn,
                     HttpRoute route,
                     HttpContext context)
                       throws IOException

      描述从接口`HttpClientConnectionManager`复制
      在将所有中间代理跳数执行 `CONNECT`方法后，将底层连接套接字升级到TLS / SSL（或其他分层协议）
      Specified by:
        `upgrade`在接口 `HttpClientConnectionManager`
      参数
        `managedConn` - 受管连接。
        `route` - 连接的路由。
        `context` - 实际的HTTP上下文。
      异常
        `IOException`

    - #### routeComplete

          public void routeComplete(HttpClientConnection managedConn,
                           HttpRoute route,
                           HttpContext context)
                             throws IOException

      说明从接口`HttpClientConnectionManager`复制
      将连接标记为完全建立，并完成所有中间跳。
      Specified by:
        `routeComplete`在接口 `HttpClientConnectionManager`
      参数
        `managedConn` - 被管理的连接。
        `route` - 连接的路由。
        `context` - 实际的HTTP上下文。
      异常
        `IOException`

    - #### shutdown

          public void shutdown()

      描述从接口`HttpClientConnectionManager`复制
      关闭此连接管理器并释放分配的资源。 这包括关闭所有连接，无论它们是否被使用。
      Specified by:
        `shutdown`在接口 `HttpClientConnectionManager`

    - #### closeIdleConnections

          public void closeIdleConnections(long idleTimeout,
                                  TimeUnit tunit)

      描述从接口`HttpClientConnectionManager`复制
      关闭池中的空闲连接。

      在参数中给出的时间段中未使用的池中的打开连接将被关闭。 目前分配的连接不受此方法的约束。 时间将以毫秒精度检查

      所有过期的连接也将关闭。

      Specified by:
        `closeIdleConnections`在接口 `HttpClientConnectionManager`
      参数
        `idleTimeout` - 关闭连接的空闲时间
        `tunit` -为对所述单元 `idletime`
      另请参见：
        `HttpClientConnectionManager.closeExpiredConnections()`

    - #### closeExpiredConnections

          public void closeExpiredConnections()

      说明从接口`HttpClientConnectionManager`复制
      关闭池中的所有过期连接。

      在连接被释放时定义的时间段中尚未使用的池中的打开连接将被关闭。 目前分配的连接不受此方法的约束。 时间将以毫秒精度检查。

      Specified by:
        `closeExpiredConnections`在接口 `HttpClientConnectionManager`

    - #### enumAvailable

          protected void enumAvailable(PoolEntryCallback<HttpRoute,ManagedHttpClientConnection> callback)

    - #### enumLeased

          protected void enumLeased(PoolEntryCallback<HttpRoute,ManagedHttpClientConnection> callback)

    - #### getMaxTotal

          public int getMaxTotal()

      Specified by:
        `getMaxTotal`在接口 `ConnPoolControl<HttpRoute>`

    - #### setMaxTotal

          public void setMaxTotal(int max)

      Specified by:
        `setMaxTotal`在接口 `ConnPoolControl<HttpRoute>`

    - #### getDefaultMaxPerRoute

          public int getDefaultMaxPerRoute()

      Specified by:
        `getDefaultMaxPerRoute`在接口 `ConnPoolControl<HttpRoute>`

    - #### setDefaultMaxPerRoute

          public void setDefaultMaxPerRoute(int max)

      Specified by:
        `setDefaultMaxPerRoute`在接口 `ConnPoolControl<HttpRoute>`

    - #### getMaxPerRoute

          public int getMaxPerRoute(HttpRoute route)

      Specified by:
        `getMaxPerRoute`在接口 `ConnPoolControl<HttpRoute>`

    - #### setMaxPerRoute

          public void setMaxPerRoute(HttpRoute route,
                            int max)

      Specified by:
        `setMaxPerRoute`在接口 `ConnPoolControl<HttpRoute>`

    - #### getTotalStats

          public PoolStats getTotalStats()

      Specified by:
        `getTotalStats`在接口 `ConnPoolControl<HttpRoute>`

    - #### getStats

          public PoolStats getStats(HttpRoute route)

      Specified by:
        `getStats`在接口 `ConnPoolControl<HttpRoute>`

    - #### getRoutes

          public Set<HttpRoute> getRoutes()

      从以下版本开始：
        4.4

    - #### getDefaultSocketConfig

          public SocketConfig getDefaultSocketConfig()

    - #### setDefaultSocketConfig

          public void setDefaultSocketConfig(SocketConfig defaultSocketConfig)

    - #### getDefaultConnectionConfig

          public ConnectionConfig getDefaultConnectionConfig()

    - #### setDefaultConnectionConfig

          public void setDefaultConnectionConfig(ConnectionConfig defaultConnectionConfig)

    - #### getSocketConfig

          public SocketConfig getSocketConfig(HttpHost host)

    - #### setSocketConfig

          public void setSocketConfig(HttpHost host,
                             SocketConfig socketConfig)

    - #### getConnectionConfig

          public ConnectionConfig getConnectionConfig(HttpHost host)

    - #### setConnectionConfig

          public void setConnectionConfig(HttpHost host,
                                 ConnectionConfig connectionConfig)

    - #### getValidateAfterInactivity

          public int getValidateAfterInactivity()

      从以下版本开始：
        4.4
      另请参见：
        `setValidateAfterInactivity(int)`

    - #### setValidateAfterInactivity

          public void setValidateAfterInactivity(int ms)

      定义不活动的时间（以毫秒为单位），之后必须重新验证持久连接，然后再向消费者发送`leased` 。 传递给此方法的非正值将禁用连接验证。 此检查有助于检测在池中保持不活动状态的已断开（半闭合）的连接。
      从以下版本开始：
        4.4
      另请参见：
        `leaseConnection(java.util.concurrent.Future, long, java.util.concurrent.TimeUnit)`

Copyright © 1999–2017 The Apache Software Foundation. All rights reserved.

本帮助文档是使用 《谷歌翻译》翻译，请与英文版配合使用 by--QQ:654638585