Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / HttpClient. Не работает timeout / 9 сообщений из 9, страница 1 из 1
10.12.2013, 19:03:58
    #38496092
SergeyAKM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpClient. Не работает timeout
Есть проблема:
Есть сервер который по 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
10.12.2013, 19:49:50
    #38496142
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpClient. Не работает timeout
SergeyAKM, наверно потому что клиент не знает что сервер упал. А узнать он не может потому что некому сообщить.
А некому сообщить потому что сервер упал. Рекурсия...
...
Рейтинг: 0 / 0
10.12.2013, 20:17:37
    #38496172
SergeyAKM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpClient. Не работает timeout
maytonSergeyAKM, наверно потому что клиент не знает что сервер упал. А узнать он не может потому что некому сообщить.
А некому сообщить потому что сервер упал. Рекурсия...

То есть вы хотите сказать, что чтобы на клиенте при запросе на сервер было выброшено исключение java.net.SocketTimeoutException, сервер должен послать команду? Серьезно?
...
Рейтинг: 0 / 0
10.12.2013, 20:30:43
    #38496184
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpClient. Не работает timeout
Я шучу. Это мозговой штурм чтобы встряхнуть мозги. А как ты вообще проверял? По этому фрагменту
кода, даже не очевидно что у тебя
соединение успешно получено
...
Рейтинг: 0 / 0
10.12.2013, 20:52:04
    #38496206
SergeyAKM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpClient. Не работает timeout
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
10.12.2013, 20:54:41
    #38496210
SergeyAKM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpClient. Не работает timeout
строчка
Код: java
1.
 client = new DefaultHttpClient(createTimeOutHttpParams());


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

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

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

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


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