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();
但是,我不确定是否应该使用 setConnectTimeout 或 setConnectionRequestTimeout,因为我不熟悉 HttpClient。在我看来,我应该根据源代码中的 java 文档使用 setConnectionTimeout。有人可以确认吗?提前致谢。
/**
* 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
从服务器向客户端传输数据时,两个连续数据包之间的最大时间间隔。
我正在尝试将我们的 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();
但是,我不确定是否应该使用 setConnectTimeout 或 setConnectionRequestTimeout,因为我不熟悉 HttpClient。在我看来,我应该根据源代码中的 java 文档使用 setConnectionTimeout。有人可以确认吗?提前致谢。
/** * 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
从服务器向客户端传输数据时,两个连续数据包之间的最大时间间隔。