2013-11-28 2 views
16

Я использую компоненты Http Apache для выполнения http-взаимодействий. Мне нужно настроить мой клиент http. Для этого у меня есть два параметра: время ожидания соединения и время ожидания запроса на соединение. В документации библиотеки и в исходном коде (комментариев не было найдено) я не нашел определения этих терминов. Мне нужно знать, что они точно означают. Может быть, они были определены в протоколе протокола HTTP, но я не могу его найти. Итак, мой вопрос заключается в том, что означают эти два термина и как они отличаются друг от друга.Время ожидания подключения и подключения

+0

Попробуйте найти их без слов apache или java: http://en.wikipedia.org/wiki/Timeout_(computing) –

ответ

19

HttpClient есть способ, чтобы установить соединение и сокет тайм-аут (setConnectionTimeout() и setTimeout()) в соответствии с http://hc.apache.org/httpclient-3.x/apidocs/org/apache/commons/httpclient/HttpClient.html

Connection timeout это время ожидания, пока соединение с сервером не установлено.

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, приведено следующее, как вы создаете клиента, который использует определенные connectTimeoutMillis и requestTimeoutMillis.

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(); 
... 

Btw, javadocs для этого кода сосет. Попытайтесь выяснить, как использовать конструктор конфигурации. Святое дерьмо.

Смежные вопросы