【问题标题】:HttpClient 4.3.5 ConnectionRequestTimeOut vs ConnectTimeout for HttpConnectionParams.setConnectionTimeout in 4.0.1HttpClient 4.3.5 ConnectionRequestTimeOut 与 4.0.1 中 HttpConnectionParams.setConnectionTimeout 的 ConnectTimeout
【发布时间】:2015-01-02 23:23:41
【问题描述】:

我正在尝试将我们的 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 doc 使用 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: <code>-1</code>
 */
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.
 * <p/>
 * A timeout value of zero is interpreted as an infinite timeout.
 * A negative value is interpreted as undefined (system default).
 * <p/>
 * Default: <code>-1</code>
 */
public int getConnectTimeout() {
    return connectTimeout;
}

【问题讨论】:

  • connection TO 和 request TO 是非常不同的事情。多个请求可以使用单个 conn 设置。每个请求都有自己的超时值。连接 TO 可能仅指建立连接的操作
  • question 这是关于 ConnectionRequestTimeout 设置

标签: apache-httpclient-4.x


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答。帮助我解决了一个关键问题。 :)
  • @Meysam 是否必须提供setConnectionRequestTimeout 任何想法可能发生的最糟糕的事情?
【解决方案2】:

Apache HttpClient 中三种超时的区别:

connectTimeout 与远程主机/服务器建立连接的最大时间。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2014-12-02
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多