Мне нужно установить время ожидания запроса Http для службы (а не веб-службы). Мы используем HTTP-клиент Apache. Я добавил эти 2 строки кода, чтобы установить время ожидания по запросу и ответ на эту услугу.Использование Apache HttpClient, как установить TIMEOUT на запрос и ответ
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
1) В настоящее время я установил 10 секунд как тайм-аут, так как я вижу ответ, исходящий от службы почти мгновенно. Должен ли я увеличивать или уменьшать сроки?
2) Что произойдет, когда ответ займет более 10 секунд? Будет ли это исключение и какое это исключение? Есть ли что-то еще, что мне нужно добавить, чтобы установить тайм-аут в приведенном ниже коде.
public HashMap<String, Object> getJSONData(String url) throw Exception{
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
HttpHost proxy = new HttpHost(getProxy(), getProxyPort());
ConnRouteParams.setDefaultProxy(params, proxy);
URI uri;
InputStream data = null;
try {
uri = new URI(url);
HttpGet method = new HttpGet(uri);
HttpResponse response = httpClient.execute(method);
data = response.getEntity().getContent();
}
catch (Exception e) {
e.printStackTrace();
}
Reader r = new InputStreamReader(data);
HashMap<String, Object> jsonObj = (HashMap<String, Object>) GenericJSONUtil.fromJson(r);
return jsonObj;
}
Что мне нужно установить/добавить, если мне нужно дозвониться до полного ответа? – pushya
Не могли бы вы объяснить, что вы подразумеваете под 4-мя сокетами? Если они считываются 4 сокета, тогда будет 4 разных запроса, связанных с этим чтением. – pushya
нет, ответ может прийти в кусках.Если вы посмотрите на любой код сокета низкого уровня, вы увидите, что 'read()' происходит в цикле while, а возвращаемое значение 'read()' - это количество прочитанных байтов. Нет требования, чтобы весь ответ приходил в одно считывание сокета. Я уточню свой ответ, чтобы включить более подробную информацию. – Kevin