test socket nodejs ejemplo javascript html5 websocket socket.io

javascript - nodejs - websocket server



Cómo volver a conectar a websocket después de una conexión cercana (3)

Tendrás que volver a crear el socket para que se vuelva a conectar. El único problema con eso es que tendrás que volver a conectar tus manejadores.

Pero en realidad, los websockets están diseñados para permanecer abiertos.

Un mejor método sería hacer que el servidor cierre la conexión . De esta forma, el websocket activará un evento onclose pero continuará intentando establecer la conexión. Cuando el servidor vuelva a escuchar, la conexión se restablecerá automáticamente.

Construyo mi conexión websocket con este código (por ejemplo):

var socket = new WebSocket("ws://94.12.176.177:8080");

Y cierro la conexión con este:

socket.close();

¿Pero cómo restablezco la conexión?

Hice algunas investigaciones e intenté varios métodos. Esta pregunta no pudo ayudarme: ¿ Socket.io se vuelve a conectar al desconectarse? Es el único resultado que está cerca de lo que estoy buscando.

La razón por la que quiero hacer esto es permitir que los usuarios dejen de enviar datos a la web de forma temporal, y volver a enviarlos después de un período de tiempo. Sin reconexión, el usuario debe actualizar la página para volver a enviarla. Esto puede causar la pérdida de algunos datos. Gracias.


Cuando el servidor cierra la conexión, el cliente no intenta reconectarse. Con algunos frameworks JS tal vez, pero la pregunta era, en el momento de esta respuesta, etiquetada como simple Vanilla JS.

Estoy un poco frustrado porque la respuesta aceptada y justificada es claramente incorrecta, y me costó un tiempo adicional mientras encontraba la solución correcta.

Que está aquí: Reconexión de Cliente cuando el servidor se reinicia en WebSocket


Implementación impecable:

var socket; const socketMessageListener = (event) => { console.log(event.data); }; const socketOpenListener = (event) => { console.log(''Connected''); socket.send(''hello''); }; const socketCloseListener = (event) => { if (socket) { console.error(''Disconnected.''); } socket = new WebSocket(''ws://localhost:8080''); socket.addEventListener(''open'', socketOpenListener); socket.addEventListener(''message'', socketMessageListener); socket.addEventListener(''close'', socketCloseListener); }; socketCloseListener();

Para probarlo:

setTimeout(()=>{ socket.close(); },5000);

Editar: tome nota de la implementación de Backoff exponencial (en el hilo enlazado por comentario superior: https://.com/a/37038217/8805423 ), no en el código anterior PERO MUY MUY CRUCIAL.

Editar de nuevo: echa un vistazo back de primus : https://www.npmjs.com/package/back , es una implementación sexy flexible.