2012-07-24 28 views
21

puedo crear socket.io relación con el código siguiente¿Cómo se configura la reconexión en socket.io?

var socket = new io.connect('http://localhost:8181', { 
    'reconnect': true, 
    'reconnection delay': 500, 
    'max reconnection attempts': 50 
}); 

Pero cuando mato servidor CTRL + C y empezar de nuevo, la reconexión no está ocurriendo. Pero desconexión evento planteado en el lado del cliente. ¿Qué tal razón por eso?

+0

Con las opciones predeterminadas, Socket.IO se reconecta para mí casi inmediatamente cuando reinicio el servidor. ¿Has intentado no establecer ninguna opción y ver qué pasa? – Brad

+0

intenté no establecer ninguna opción, pero la reconexión no está ocurriendo – Dmitro

Respuesta

0

la demora de reconexión es demasiado pequeña 500ms aumento que, además de eso 50 intentos significa 500 * 50 = 25000 ms que es de 25 segundos. Si eso no ayuda a establecer un tiempo de espera en el evento de error en el lado del cliente para recrear el objeto de socket (Después de error y un poco de retraso, vuelva a intentarlo para crear la conexión).

+4

En el documento de socket.io-client Leí que "La cantidad de milisegundos antes de tratar de conectarnos nuevamente al servidor. Estamos utilizando un algoritmo de retroceso exponencial para las siguientes reconexiones, en cada intento de reconexión este valor se multiplicará (500> 1000> 2000> 4000> 8000). " entonces será más grande que 25000ms – Dmitro

9

Me doy cuenta de que esta es una vieja pregunta, pero he estado teniendo problemas con la reconexión de socket io y encontré esta publicación en los primeros lugares, así que pensé que contribuiría. Trate de depuración exactamente qué eventos están disparando usando el siguiente código:

# coffeescript. compile if you're writing javascript, obviously. 

socket.on 'connect',-> console.log 'connected' 
socket.on 'reconnect',-> console.log 'reconnect' 
socket.on 'connecting',-> console.log 'connecting' 
socket.on 'reconnecting',-> console.log 'reconnecting' 
socket.on 'connect_failed',-> console.log 'connect failed' 
socket.on 'reconnect_failed',-> console.log 'reconnect failed' 
socket.on 'close',-> console.log 'close' 
socket.on 'disconnect',-> console.log 'disconnect' 

Esto debería dar una visión más clara del estado del socket del cliente.

Además, intente buscar en la pestaña Red de su inspector web para ver si está activando solicitudes XHR como una alternativa. Finalmente, en su consola web, intente escribir io.sockets y expandirlo para ver si realmente está tratando de reconectarse o no.

He tenido problemas con reconnect_failed no encendido, y la reconexión no se restablece. Los siguientes son enlaces a discusiones sobre estos temas en github.

reconnection delay - exponential back off not resetting properly

reconnect_failed gets never fired

some potential fixes/workarounds

25

Ésta es una cuestión de edad, sino también para otras personas como yo, que están buscando la forma de configurar vuelva a conectar en socket.io (1.x) aquí hay una sintaxis correcta:

var socket = new io.connect('http://localhost:8181', { 
    'reconnection': true, 
    'reconnectionDelay': 1000, 
    'reconnectionDelayMax' : 5000, 
    'reconnectionAttempts': 5 
}); 
5

Esto es un viejo que stion, pero tuve la misma pregunta (por una razón diferente) cuando uso v1.4.5. La aplicación de mi sala de chat funcionó de maravilla, pero cuando pulsé Ctrl+C en la terminal, mi navegador continuó repitiendo e informando ERR_CONNECTION_REFUSED cada pocos segundos hasta que lo apagué.

Cambiar una respuesta anterior solo un poco me dio la solución.

Para v1.4.5, aquí está mi código original de "toma var" en el archivo de mi cliente JS:

var socket = io(); 

Y aquí está la solución:

var socket = io({ 
     'reconnection': true, 
     'reconnectionDelay': 1000, 
     'reconnectionDelayMax' : 5000, 
     'reconnectionAttempts': 5 
    }); 

Obviamente, podría cambiar la valores si quiero, pero el punto importante es que esto mató las solicitudes de reconexión sin fin.

+0

Estoy experimentando el mismo comportamiento que ERR_CONNECTION_REFUSED aparece después de cada segundo. ¿Puede decirme si hay algún evento generado si el intento de reconexión del cliente alcanzó el valor dado de reconnectionAttempts: 5? Deseo mostrar un mensaje a un cliente después de que la conexión de número de intentos no establezca –

+0

. Esta funcionalidad no está incorporada. Debería crear usted mismo una alerta que se active después de una cantidad específica de intentos de reconexión. – elmeltone

+0

bueno, recibí mi respuesta. Hay un nombre de evento "reconnect_failed" que aumenta después de x veces intentos fallidos. (https://github.com/socketio/socket.io-client/issues/705) –

Cuestiones relacionadas