连接和连接请求超时

时间:2013-11-28 16:36:53

标签: java http apache-httpclient-4.x apache-httpcomponents

我正在使用Http Apache Components来执行http交互。我需要调整我的http客户端。为此,我有两个参数:连接超时和连接请求超时。在库文档和源代码中(没有找到评论)我没有找到这个术语的定义。我需要知道它们究竟意味着什么。可能是他们在HTTP协议文档中定义但我找不到它。所以,我的问题是这两个术语的意思是什么以及它们如何相互区别。

3 个答案:

答案 0 :(得分:23)

HttpClient可以根据HttpClient javadocs设置连接和套接字超时(setConnectionTimeout()setTimeout())。

Connection timeout是在建立与服务器的连接之前的超时。

Socket timeout是接收数据的超时(套接字超时)。

示例:

假设您指向浏览器访问网页。如果服务器在X秒内没有响起,则会发生连接超时。但如果它建立了连接,那么服务器将开始处理浏览器的结果。如果它在Y秒内没有结束此处理,则会发生套接字超时。

答案 1 :(得分:7)

  

所以,我的问题是[connection-timeout和connection-request-timeout]是什么意思以及它们彼此之间的区别。

连接超时是服务器接受请求之前的超时(以毫秒为单位)。如果指定3000,则http-client将等待3秒钟以使服务器在超时之前接受TCP连接。这通常用于确保您没有网络问题或者您正在联系正确的主机名或地址。这相当于curl的--connect-timeout seconds选项。

连接请求超时是建立连接后的输入/输出超时。如果将此值指定为10000,则在http-client连接到服务器并发送请求后,它将等待10秒钟以使服务器返回结果。这通常用于确保您的工作不会永远等待慢速服务器。这相当于curl的--max-time seconds选项。

在HttpClient 4.X.X中,以下是如何构建使用特定connectTimeoutMillisrequestTimeoutMillis的客户端。

HttpClientBuilder clientBuilder = HttpClientBuilder.create();
RequestConfig.Builder requestBuilder = RequestConfig.custom();
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis);
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis);
clientBuilder.setDefaultRequestConfig(requestBuilder.build());
CloseableHttpClient httpClient = clientBuilder.build();
...

顺便说一句,这段代码的javadoc很糟糕。尝试手动弄清楚如何使用配置构建器。神圣的废话。

答案 2 :(得分:5)

从文档中:

Undefined symbols for architecture arm64:
  "_USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE_ASSERTS_preprocessor_directives_", referenced from:
      _dlib_check_consistent_assert_usage in DlibWrapper.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这是代码的外观:

/**
 * 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>
 * <p>
 * Default: {@code -1}
 * </p>
 */
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>
 * <p>
 * Default: {@code -1}
 * </p>
 */
public int getConnectTimeout() {
    return connectTimeout;
}