He estado jugando con las nuevas funciones de asincronía de Servlet 3.0 con Tomcat 7.0.4. Encontré este Chat Application, que permite a los clientes esperar la solicitud GET para recibir actualizaciones de mensajes. Esto está funcionando bien cuando se trata de recibir los mensajes.Cómo saber si el cliente ha cerrado la conexión
El problema surge cuando el cliente se desconecta, es decir, el usuario cierra el navegador. Parece que el servidor no levanta IOException
, aunque el cliente se haya desconectado. El hilo del mensaje (ver el código fuente del enlace de arriba) está escribiendo felizmente a todos los flujos de salida almacenados de AsyncContext
.
¿Es esto un error de Tomcat? o me estoy perdiendo algo aquí? Si esto no es un error, ¿cómo se supone que debo detectar si el cliente ha cerrado la conexión?
Bueno, eso se encargaría si la operación de escritura elevara la IOException que no está sucediendo. Por lo tanto, puedes cerrar el navegador y nunca recibir esa excepción. Y el tiempo de espera es en este ejemplo de 10 minutos. Eso es mucho si tiene, digamos, cientos de clientes. – SS3
Probé el código con Glassfish v3 y parece que puedo obtener el eventoError con Firefox, pero con IE no funcionará. Esto es muy extraño. – SS3
@ SS3: Entonces, ¿podemos decir que no tiene problemas con Firefox? –