Necesito establecer el tiempo de espera para la solicitud Http que hacemos a un servicio (no un servicio web). Estamos usando Apache HTTP Client. He agregado estas 2 líneas de código para configurar el tiempo de espera a petición y respuesta al servicio.Usando Apache HttpClient cómo configurar el TIEMPO FUERTE en una solicitud y respuesta
HttpConnectionParams.setConnectionTimeout(params, 10000);
HttpConnectionParams.setSoTimeout(params, 10000);
1) Actualmente he puesto 10 segundos como el tiempo de espera ya que veo la respuesta que viene del servicio de forma casi instantánea. ¿Debo aumentar o disminuir el tiempo?
2) ¿Qué sucederá cuando la respuesta demore más de 10 segundos? ¿Lanzará una excepción y qué excepción será? ¿Hay algo más que deba agregar para establecer el tiempo de espera en el código siguiente?
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;
}
¿Qué es lo que necesito configurar/agregar si tengo que permitir que llegue el tiempo de respuesta completa? – pushya
¿Puede explicar qué quiere decir con 4 lecturas de socket? Si son 4 lecturas de socket, entonces habrá 4 solicitudes diferentes asociadas con esa lectura. – pushya
no, la respuesta puede venir en pedazos.Si observa cualquier código de socket de nivel bajo, verá que 'read()' ocurre en un ciclo while, y el valor de retorno de 'read()' es el número de bytes leídos. No es necesario que toda la respuesta venga en una sola lectura de socket. Actualizaré mi respuesta para incluir más detalles. – Kevin