HttpClient 4.3.5 ConnectionRequestTimeOut 与 4.0.1 中 HttpConnectionParams.setConnectionTimeout 的 ConnectTimeout

HttpClient 4.3.5 ConnectionRequestTimeOut vs ConnectTimeout for HttpConnectionParams.setConnectionTimeout in 4.0.1

我正在尝试将我们的 HttpClient 依赖项从 4.0.1 升级到 4.3.5。并且对在新库中设置连接超时感到困惑。对于以下代码:

HttpClient httpClient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpClient.getParams(), 300);

它将替换为以下代码:

RequestConfig config = RequestConfig.custom().setConnectTimeout(300).build();
HttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(config).build();

但是,我不确定是否应该使用 setConnectTimeoutsetConnectionRequestTimeout,因为我不熟悉 HttpClient。在我看来,我应该根据源代码中的 java 文档使用 setConnectionTimeout。有人可以确认吗?提前致谢。

https://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.3.3/httpclient/src/main/java/org/apache/http/client/config/RequestConfig.java

/**
 * Returns the timeout in milliseconds used when requesting a connection
 * from the connection manager. A timeout value of zero is interpreted
 * as an infinite timeout.
 * <p/>
 * A timeout value of zero is interpreted as an infinite timeout.
 * A negative value is interpreted as undefined (system default).
 * <p/>
 * Default: -1
 */
public int getConnectionRequestTimeout() {
    return connectionRequestTimeout;
}

/**
 * Determines the timeout in milliseconds until a connection is established.
 * A timeout value of zero is interpreted as an infinite timeout.
 * 

* A timeout value of zero is interpreted as an infinite timeout. * A negative value is interpreted as undefined (system default). *

* Default: -1 */ public int getConnectTimeout() { return connectTimeout; }

在 Apache Http Client 4.3 版中,配置被重构(再次)。 新方法如下代码:

RequestConfig requestConfig =RequestConfig.custom()
.setConnectTimeout(connectTimeout)
.setConnectionRequestTimeout(connectionRequestTimeout)
.setSocketTimeout(socketTimeout).build();

connectTimeout 是与服务器建立连接之前的超时时间。 connectionRequestTimeout 从连接管理器请求连接时使用。

Apache HttpClient 三种超时之间的区别:

connectTimeout 与远程建立连接的最长时间 host/server。

connectionRequestTimeout 等待从连接 manager/pool 获取连接的时间。 (HttpClient维护一个连接池来管理连接。类似于数据库连接池)

socketTimeout从服务器向客户端传输数据时,两个连续数据包之间的最大时间间隔。