¿Se activó el evento de “conexión” Socket.io en cada latido del cliente?

Tengo una configuración básica del servidor Socket.io como esta:

var server = express.createServer().listen(port); this.io = socketIO.listen(server); this.io.sockets.on('connection', function(socket){ initSocket(socket); }); 

También tengo socket.io configurado para usar el sondeo XHR como tal:

 io.set("transports", ["xhr-polling"]); io.set("close timeout", 3); io.set("heartbeat interval", 2); 

El problema es que cada vez que el cliente envía un latido (cada 2 segundos), se desencadena el evento de “conexión”. ¿Hay un evento diferente que pueda usar que se activará una vez cada vez que se conecte un zócalo?

Yo usaría el evento de “autorización”, pero eso solo pasa en un objeto de reconocimiento no en el socket real.

Encontré el problema. Tenía mi “duración de sondeo” xhr configurada según los 10s sugeridos de heroku, así:

 io.set("polling duration", 10); 

Lo que significa que el cliente solo realiza una nueva solicitud xhr cada 10 segundos (tan pronto como devuelve la solicitud anterior). Al mismo tiempo tuve el “tiempo de espera de cierre” establecido en 3 segundos:

 io.set("close timeout", 3); 

Lo que significa que si el servidor no recibe noticias del cliente dentro de los 3 segundos posteriores a su última solicitud, cerrará la conexión, por lo que se activarán los eventos de ‘desconexión / conexión’ continuos.

La solución fue establecer el tiempo de espera de cierre más alto que la duración del sondeo. Parecería que el “intervalo de latido” no es relevante para las conexiones xhr.

¿Está configurando un valor demasiado bajo para closetimeout e intervalo de latido? Los valores predeterminados para estos son 60 segundos y 25 segundos. El retraso típico de la red es del orden de 5 segundos. Entonces, con los valores que ha establecido, el cliente no responde en el tiempo especificado, por lo que la conexión se cierra. Cuando el cliente se conecta de nuevo, se desencadena el evento de conexión.