Почему у Apache HttpClient не работает тайм-аут соединения? - PullRequest
11 голосов
/ 25 сентября 2008

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

_moHttpClient.setHttpConnectionFactoryTimeout(30000);

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

Ответы [ 3 ]

10 голосов
/ 25 февраля 2009

Какое исключение вы выбрасываете?

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

setConnectionTimeout()
setSoTimeout()

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

7 голосов
/ 25 сентября 2008
    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 голосов
/ 25 сентября 2008

cmparams.setSoTimeout (10000);

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

params.setSoTimeout (5000);

А это для определенного httpclient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...