2013-11-28 90 views
16

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

+0

尝试搜索他们没有Apache或非Java关键字:http://en.wikipedia.org/wiki/Timeout_(computing) –

回答

19

HttpClient有办法根据http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpClient.html

Connection timeout设置连接插座超时(setConnectionTimeout()setTimeout())是超时直至与服务器的连接被建立。

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

例如:

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

+6

谢谢你的回复,但我仍然有一个问题。这里是请求配置生成器http://hc.apache.org/httpcomponents-client-4.3.x/httpclient/apidocs/org/apache/http/client/config/RequestConfig.Builder.html,它有三个方法setConnectionRequestTimeout,setConnectTimeout ,setSocketTimeout(并且没有评论!)。所以我仍然不知道每种方法的作用和我应该使用的方法。 – mvb13

+18

好吧,我终于发现getConnectionRequestTimeout返回从连接管理器请求连接时使用的以毫秒为单位的imeout。我猜连接管理器是apache-httpcomponents库类,所以我不会使用它。我将使用setConnectionTimeout()和setTimeout()。 – mvb13

4

对于后人,在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(); 
... 

顺便说一句,这段代码的javadocs很烂。试着弄清楚如何使用config builder。哇靠。