tutorial socket rooms node example node.js

rooms - Node.js y Socket.IO-Cómo volver a conectar tan pronto como se desconecta



socket.io express (4)

Comience a reconectar incluso si falla el primer intento

Si falla el primer intento de conexión, socket.io 0.9.16 no intenta reconectarse por algún motivo. Así es como trabajé alrededor de eso.

//if this fails, socket.io gives up var socket = io.connect(); //tell socket.io to never give up :) socket.on(''error'', function(){ socket.socket.reconnect(); });

Estoy construyendo un pequeño prototipo con node.js y socket.io. Todo funciona bien, el único problema al que me enfrento es que mi conexión node.js se desconectará y me veo obligado a actualizar la página para que la conexión vuelva a funcionar.

¿Hay alguna forma de restablecer la conexión tan pronto como se dispare el evento de desconexión?

Por lo que he escuchado, este es un problema común. Entonces, estoy buscando un enfoque de mejores prácticas para resolver este problema :)

Muchas gracias, Dan


Sé que esto tiene una respuesta aceptada, pero busqué por siempre para encontrar lo que estaba buscando y pensé que esto podría ayudar a otros.

Si quiere que su cliente intente reconectarse para el infinito (lo necesitaba para un proyecto en el que pocos clientes estarían conectados, pero los necesitaba para reconectarme siempre si bajaba el servidor).

var max_socket_reconnects = 6; var socket = io.connect(''http://foo.bar'',{ ''max reconnection attempts'' : max_socket_reconnects }); socket.on("reconnecting", function(delay, attempt) { if (attempt === max_socket_reconnects) { setTimeout(function(){ socket.socket.reconnect(); }, 5000); return console.log("Failed to reconnect. Lets try that again in 5 seconds."); } });


EDITAR : socket.io ahora tiene soporte de reconexión incorporado . Usa eso.

por ejemplo (estos son los valores predeterminados):

io.connect(''http://localhost'', { ''reconnection'': true, ''reconnectionDelay'': 500, ''reconnectionAttempts'': 10 });

Esto es lo que hice:

socket.on(''disconnect'', function () { console.log(''reconnecting...'') socket.connect() }) socket.on(''connect_failed'', function () { console.log(''connection failed. reconnecting...'') socket.connect() })

Parece funcionar bastante bien, aunque solo lo he probado en el transporte de websocket.


editar: Socket.io tiene soporte incorporado ahora

Cuando utilicé socket.io, la desconexión no ocurrió (solo cuando cerré el servidor manualmente). Pero podría volver a conectar después de, por ejemplo, 10 segundos en caso de fallo o algo en el evento de desconexión.

socket.on(''disconnect'', function(){ // reconnect });

Se me ocurrió la siguiente implementación:

javascript en el lado del cliente

var connected = false; const RETRY_INTERVAL = 10000; var timeout; socket.on(''connect'', function() { connected = true; clearTimeout(timeout); socket.send({''subscribe'': ''schaftenaar''}); content.html("<b>Connected to server.</b>"); }); socket.on(''disconnect'', function() { connected = false; console.log(''disconnected''); content.html("<b>Disconnected! Trying to automatically to reconnect in " + RETRY_INTERVAL/1000 + " seconds.</b>"); retryConnectOnFailure(RETRY_INTERVAL); }); var retryConnectOnFailure = function(retryInMilliseconds) { setTimeout(function() { if (!connected) { $.get(''/ping'', function(data) { connected = true; window.location.href = unescape(window.location.pathname); }); retryConnectOnFailure(retryInMilliseconds); } }, retryInMilliseconds); } // start connection socket.connect(); retryConnectOnFailure(RETRY_INTERVAL);

serveride (node.js):

// express route to ping server. app.get(''/ping'', function(req, res) { res.send(''pong''); });