Muszę ustawić limit czasu dla żądania HTTP do usługi (nie do usługi internetowej). Używamy klienta HTTP Apache. Dodałem te 2 linie kodu, aby ustawić czas na żądanie i odpowiedź na usługę.Używanie Apache HttpClient do ustawiania CZASU TIMEOUT na żądanie i odpowiedzi
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
1) Obecnie ustawiłem 10 sekund jako czas oczekiwania, ponieważ widzę odpowiedź przychodzącą z usługi niemal natychmiast. Czy powinienem zwiększyć lub zmniejszyć czas?
2) Co się stanie, gdy reakcja zajmie więcej niż 10 sekund? Czy wyrzuci wyjątek i jaki będzie to wyjątek? Czy jest coś jeszcze, co muszę dodać, aby ustawić czas w poniższym kodzie.
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;
}
Co muszę ustawić/dodać, jeśli muszę zezwolić na pełny czas reakcji – pushya
Czy możesz wyjaśnić, co masz na myśli mówiąc o 4 gniazdach? Jeśli są czytane w 4 gniazdach, to z tym odczytem będzie 4 różne żądanie. – pushya
Nie, odpowiedź może być podzielona na fragmenty.Jeśli spojrzeć na jakiegokolwiek kodu niskiego poziomu gniazda zobaczysz, że 'read()' dzieje się w pętli while, a wartość zwrot 'read()' jest liczba odczytanych bajtów. Nie ma wymogu, aby cała odpowiedź przychodziła w jednym czytanym gnieździe. Zaktualizuję moją odpowiedź, by podać więcej szczegółów. – Kevin