mvb*_*b13 19 java http apache-httpcomponents apache-httpclient-4.x
我正在使用Http Apache Components来执行http交互.我需要调整我的http客户端.为此,我有两个参数:连接超时和连接请求超时.在库文档和源代码中(没有找到评论)我没有找到这个术语的定义.我需要知道它们究竟意味着什么.可能是他们在HTTP协议文档中定义但我找不到它.所以,我的问题是这两个术语是什么意思以及它们如何彼此区分.
dgi*_*nes 24
HttpClient
有一种方法可以根据http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpClient.html设置连接和套接字超时(setConnectionTimeout()
和setTimeout()
)
Connection timeout
是与服务器建立连接之前的超时时间.
Socket timeout
是接收数据的超时(套接字超时).
例:
假设您指向浏览器访问网页.如果服务器在X秒内没有响起,则会发生连接超时.但如果它建立了连接,那么服务器将开始处理浏览器的结果.如果它在Y秒内没有结束此处理,则将发生套接字超时.
在HttpClient 4.XX中,以下是如何构建使用特定--connect-timeout seconds
和的客户端--max-time seconds
.
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();
...
Run Code Online (Sandbox Code Playgroud)
顺便说一句,这个代码的javadoc很糟糕.尝试手动弄清楚如何使用配置构建器.哇靠.
从文档:
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
代码应该是这样的:
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
RequestConfig.Builder requestBuilder = RequestConfig.custom();
// Connection Timeout to establish a connection
requestBuilder = requestBuilder.setConnectTimeout(connectTimeoutMillis);
// Timeout to get a connection from the connection manager for the Http Client
requestBuilder = requestBuilder.setConnectionRequestTimeout(requestTimeoutMillis);
// Timeout between two data packets from the server
requestBuilder = requestBuilder.setSocketTimeout(requestTimeoutMillis);
clientBuilder.setDefaultRequestConfig(requestBuilder.build());
CloseableHttpClient httpClient = clientBuilder.build();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
23907 次 |
最近记录: |