2008-09-25 3 views
11

Моя реализация httpclient иногда выдает исключение при вызове doGetConnection(). Тем не менее, у меня есть следующий тайм-аутС Apache HttpClient, почему мой тайм-аут подключения не работает?

_moHttpClient.setHttpConnectionFactoryTimeout(30000); 

похоже, что мой таймаут не подбирается. Есть ли где-нибудь еще мне нужно, чтобы установить тайм-аут, чтобы обеспечить такое поведение повторно не происходит

ответ

7
HttpConnectionManagerParams cmparams = new HttpConnectionManagerParams(); 
    cmparams.setSoTimeout(10000); 
    cmparams.setTcpNoDelay(true); 
    HttpConnectionManager manager = new SimpleHttpConnectionManager(); 
    manager.setParams(cmparams); 
    params = new HttpClientParams(); 
    params.setSoTimeout(5000); 
    client = new HttpClient(params, manager); 

Интересно, почему у меня есть два разных SoTimeouts набора. Возможно, я пытался выяснить, какой из них действительно активен, поскольку у меня были те же проблемы, что и у вас, когда я его использовал.

Вышеуказанное находится в реальном времени прямо у нас, но я не могу сказать, работает ли это, потому что это правильно или потому, что провидение улыбается мне (а другой конец обычно всегда доступен).

4

cmparams.setSoTimeout (10000);

Этот вариант предназначен для всех HttpClient по умолчанию.

params.setSoTimeout (5000);

И этот для конкретного httpclient.

10

Какое исключение вы получаете?

Не забывайте, что у вас есть два таймауты для изменения/проверки. От HttpConnectionParams

setConnectionTimeout() 
setSoTimeout() 

так что вы можете контролировать, как долго вы будете ждать для подключения к серверу, и как долго операции на сокет может принимать перед тайм-аута.

+0

Документы, как представляется, указывают, что SO_TIMEOUT является максимально допустимым временем, когда сервер не отвечает за последний полученный TCP-пакет. http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/org/apache/http/params/CoreConnectionPNames.html#SO_TIMEOUT – 2014-01-27 19:58:57