javascript - websocket onclose no se activa en chrome - linux cuando el cliente se desconecta de la red
Implementé websocket usando Java en el lado del servidor. En el cliente creé un objeto websocket, y tengo mi propia función para todos los eventos incluyendo onClose. Probé la reconexión... websocket en Chrome 26, Mozilla tanto en Windows como en Chrome.
Chrome en Windows dispara el evento onclose cuando desconecto el cable de red (es decir, onclose se dispara con el código de cierre 1006 [cierre anormal] como se menciona en https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent) pero Chrome en Linux no dispara ningún evento.
Por favor, sugiera qué error cometí.
Mi pregunta exacta es por qué Chrome en Windows activa onclose cuando se desconecta la red, pero en el caso de Linux, no se activa.
Respuesta #1
Es posible que estas aplicaciones no noten que la conexión TCP se rompe. Se utiliza un tiempo de espera para detectar una conexión TCP fallida, y creo que el tiempo de espera predeterminado es bastante largo.
El navegador/sistema operativo debería notar que la conexión se ha perdido tan pronto como intentes enviar datos. Intenta enviar algunos datos después de desconectar el cable de red, para ver si eso dispara el evento.
Además, ¿cuánto tiempo has esperado la señal? Tal vez la conexión simplemente tenga un tiempo de espera de TCP largo.
Si todavía no recibes un evento de cierre, probablemente se deba a un fallo en la implementación. Si realmente necesitas saber cuándo se rompe la conexión, implementa un mecanismo de ping con tu propio tiempo de espera. Creo que el protocolo WebSocket define su propio protocolo de ping, tal vez deberías investigar eso.
Además, para Chrome parece que hay un problema registrado sobre esto. Tal vez te ayude.