Foro de elhacker.net

Programación => Java => Mensaje iniciado por: BlaineMonkey en 15 Junio 2010, 17:38 pm



Título: Servlet (Connection Timeout)
Publicado por: BlaineMonkey en 15 Junio 2010, 17:38 pm
Tengo una clase java que llama a un Servlet, el problema es que he definido los timeouts pero parece que no funcionan. Pongo el código por si estoy haciendo algo mal:
URL myURL = "http://personal/perServlet";
URLConnection conn;
try {
   conn = myURL.openConnection();
   conn.setConnectTimeout(100);
   conn.setDoInput(true);
   String str = "";
   InputStream iStream = conn.getInputStream();
   conn.setReadTimeout(100);
}catch(Exception e){
e.printStackTrace();
}

Es al realizar el conn.getInputStream() donde se queda aprox 3 segundos.
¿Hay posibilidad de cambiar ese timeout?


Título: Re: Servlet (Connection Timeout)
Publicado por: kinos en 15 Junio 2010, 22:07 pm
Prueba a establecer el conn.setReadTimeout(100); antes de hacer la petición conn.getInpuStream();

Código
  1. URL myURL = "http://personal/perServlet";
  2. try {
  3.   conn = myURL.openConnection();
  4.   conn.setConnectTimeout(100);
  5.   conn.setReadTimeout(100);
  6.   conn.setDoInput(true);
  7.   String str = "";
  8.   InputStream iStream = conn.getInputStream();
  9. }catch(Exception e){
  10. e.printStackTrace();
  11. }
  12.  

Ya comentaras si hay suerte.


Título: Re: Servlet (Connection Timeout)
Publicado por: BlaineMonkey en 16 Junio 2010, 16:44 pm
Poniendo setReadTimeout antes de realizar el getInputStream si hace el timeout, el problema es que aunque esté conectado al Servlet, salta el timeout.

Lo que necesito es comprobar de forma rápida (no se cómo) si el servlet está lanzado o no sin que tenga que saltar el timeout por defecto (que son 3"). El readTimeout no me sirve porque el servlet puede tardar lo que necesite en devolver los datos, lo que necesito que sea rápido es el saber que el Servlet no está lanzado.

¿Cómo puedo hacerlo?



Título: Re: Servlet (Connection Timeout)
Publicado por: kinos en 16 Junio 2010, 22:27 pm
No se sobre servlets pero intentaré hecharte una mano.

Lo que quieres saber es desde el lado del cliente si se ha cargado el servlet no? Es decir como si en el navegador web introduces la url y saber el momento en el que se carga?

O por el contrario te gustaría saber desde el lado del servidor el momento en el que se ha iniciado. En este caso, podrías pasarle al servlet cuando lo construyes un objeto con una variable de fecha y tiempo. Entonces en el método init pones datos en dicha variable.


Título: Re: Servlet (Connection Timeout)
Publicado por: BlaineMonkey en 17 Junio 2010, 10:32 am
No se sobre servlets pero intentaré hecharte una mano.

Lo que quieres saber es desde el lado del cliente si se ha cargado el servlet no? Es decir como si en el navegador web introduces la url y saber el momento en el que se carga?

O por el contrario te gustaría saber desde el lado del servidor el momento en el que se ha iniciado. En este caso, podrías pasarle al servlet cuando lo construyes un objeto con una variable de fecha y tiempo. Entonces en el método init pones datos en dicha variable.

Muchas gracias por tu ayuda.

Lo que necesito es detectar de alguna forma si el Servlet está lanzado, para en caso de no estarlo, mostrar un mensaje de error y que la aplicación continúe su ejecución. Si por el contrario hay conexión con él, la aplicación leerá los datos que envía. Quiero poder definir el tiempo que va a invertir la aplicación en intentar ver si el servlet está disponible o no. Necesito que el proceso de comprobación sea lo más rápido posible.

Pensaba que se podría realizar indicando en connectionTimeout el tiemout de conexión, pero resulta que no hace caso al valor que ponga, y el readTimeout no sirve porque no sé el tiempo que tarda el servlet en responder, y si la comunicación es correcta no tengo que cortarla.

¿Cómo puedo hacerlo?