powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / HttpClient. Не работает timeout
9 сообщений из 9, страница 1 из 1
HttpClient. Не работает timeout
    #38496092
SergeyAKM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть проблема:
Есть сервер который по REST api отдает определенную инфу.
Есть клиент который по помощью Apache HttpClient отправляет на сервер запросы.
Таймауты на клиенте выставляются и для соединения и для сокета.

Код: java
1.
2.
3.
4.
HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000); // Connection timeout 
HttpConnectionParams.setSoTimeout(httpParameters, 3000); // Socket timeout
HttpClient httpclient = new DefaultHttpClient(httpParameters);




И вот тут происходит непонятное: если на сервере код, который формирует ответ (достает инфу из базы) зависает, на клиенте не срабатывает таймаут. Еще понятно почему не срабатывает таймаут на соединение - соединение успешно получено, но данных нет.
Почему не срабатывает таймаут на сокет? или он начнет отсчет только когда начнется передача?
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38496142
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyAKM, наверно потому что клиент не знает что сервер упал. А узнать он не может потому что некому сообщить.
А некому сообщить потому что сервер упал. Рекурсия...
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38496172
SergeyAKM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonSergeyAKM, наверно потому что клиент не знает что сервер упал. А узнать он не может потому что некому сообщить.
А некому сообщить потому что сервер упал. Рекурсия...

То есть вы хотите сказать, что чтобы на клиенте при запросе на сервер было выброшено исключение java.net.SocketTimeoutException, сервер должен послать команду? Серьезно?
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38496184
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я шучу. Это мозговой штурм чтобы встряхнуть мозги. А как ты вообще проверял? По этому фрагменту
кода, даже не очевидно что у тебя
соединение успешно получено
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38496206
SergeyAKM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
private String httpGet(String service, String method, String contentType, List<NameValuePair> param) {

        HttpParams httpParameters = new BasicHttpParams();
	HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT);
	HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT);
        DefaultHttpClient client = new DefaultHttpClient(httpParameters);

	HttpGet httpGet = new HttpGet(createUrl(service, method) + "?" + URLEncodedUtils.format((List<NameValuePair>) param, "utf-8"));
	client = new DefaultHttpClient(createTimeOutHttpParams());
	client.getParams().setParameter("http.protocol.content-charset", "UTF-8");
	client.setCookieStore(PersistentCookieStore.getInstance());
		
	HttpResponse response = client.execute(request);
	HttpEntity entity = response.getEntity();
	String json = EntityUtils.toString(entity);
	return json;
}



Естественно это не боевой код, опушены catch и т.д.
Но код рабочий, так как в нормальной ситуации данные возвращаются. И когда сервер медленно отдает данные иногда выскакивает SocketTimeoutException. Просто для отладки на сервере в метод поднятия данных с БД поставили большой sleep , и выяснялось что клиент при этом тоже виснет на client.execute(request).
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38496210
SergeyAKM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
строчка
Код: java
1.
 client = new DefaultHttpClient(createTimeOutHttpParams());


лишняя, ее нет
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38496217
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyAKM,

а что wireshark показывает? Может сервер пишет что-то в сокет но медленно? Или синк пакеты туда сюда бродят
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38496227
SergeyAKM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

не смотрел, это хорошая идея, завтра обязательно посмотрю.

По поводу таймаута на сокет где-то читал, что срабатывает когда время между получением пакетов превышает заданное. Тут получается сокет открыт, но пакеты не пошли поэтому и не срабатывает. Может это баг библиотеки, и таймер включается с приходом первого пакета?
...
Рейтинг: 0 / 0
HttpClient. Не работает timeout
    #38502555
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тайм-ауты сокета и чтения/записи данных из/в него - немного разные вещи.
Тайм-аут чтения - ~5 минут , тайм-аут записи - ~3 минуты . И не надо пытаться уменьшать их до нескольких секунд.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / HttpClient. Не работает timeout
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]