Estoy ejecutando el nodo 0.6.16 y todos los módulos están actualizados al menos según npm (win7 x64). Pude notar que, incluso si no tengo ninguna desconexión, pero por alguna razón, después de un tiempo, no pude decir, tal vez 1 hora, que el navegador no recibe ningún dato. Parece ser más frecuente en FF que en Chrome.NodoJS socket IO deja de emitir aleatoriamente?
socket.on('disconnect', function(){console.log('disconnected')});
Esto nunca se dispara para ese evento en particular (me refiero a que podría suceder, pero entonces consigo el registro y vuelve a conectar socket.io de auto - En este caso, no pasa nada, simplemente deja de funcionar y esta es la más frecuente evento).
Así que no sé dónde buscar. NodeJS todavía registra un latido del corazón, pero por alguna razón, la conexión no se está llevando a cabo. Estoy sospechando que, en el cambio de pestaña de (¿algún?) Navegador, después de un tiempo, como la ventana/pestaña ya no tiene foco, ¿socket.io deja de recibir datos? Podría estar equivocado y podría no estar relacionado con el enfoque, pero esta es mi principal ventaja. ¿Alguien más tiene alguna idea?
Editar: lado del cliente es bastante sencillo:
socket = io.connect('http://xxx.xxx.xxx.xxx:8081', {secure:false, 'reconnect': true, 'reconnection delay': 500, 'max reconnection attempts': 10});
socket.on('connect', function(){console.log('connected')});
socket.on('message', function(data){//do something);
socket.on('disconnect', function(){console.log('disconnected')});
Edit2: Después de actualizar a la última versión de socket.io (1.2.1) y v0.10.35 nodo todavía tengo la misma problema. Aún más sorprendente, añadí el siguiente fragmento de código en el cliente:
function checkSocket(){
if(socket){
if(!socket.connected){
console.log('socket disconnected');
clearInterval(intv);
}
}
}
intv = setInterval(checkSocket, 1000);
Mientras se ejecuta la función de cada segundo, nunca se registra que el enchufe esté desconectado, incluso si no recibe nada más y sigue siendo enviado heartbeats ..
Edit3: Ok, estaba en el código del lado del servidor, algunos socket estaban siendo destruidos. También actualizado a v1.x y reconexión forzada.
Actualmente estoy haciendo el mismo conjunto (Node.js y socket.io), que funciona perfectamente para mí en todos los navegadores, puede ser que usted nos pudiera mostrar algo de su código de cliente – Dhiraj
acaba de añadir algo de código :) – Eric
Creo que esto debe resolverse por ahora. –