2012-03-26 11 views
10

Cuando alguien se conecta al servidor de nodo, guardo una matriz con todos los sockets. De esta forma puedo transmitir mensajes a todos cuando sea necesario o recorrer los usuarios para contar el número de usuarios en línea, etc.node.js no envía socket al evento de desconexión

Todo esto funciona bien, pero cuando se activa un evento de desconexión, no lo hago recibir un socket en mis argumentos ¿Hay alguna otra forma de saber qué conector se acaba de desconectar?

var allClients = []; 

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function(socket) { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

Por supuesto, el ejemplo anterior no funciona, porque el evento de desconexión no da un argumento de socket (ni ningún otro argumento). Entonces, ¿hay otro evento que se disparó antes de una desconexión donde el socket todavía está allí?

Ali

Respuesta

22

ya tiene la toma de corriente, ya que el manejador de desconexión se declara dentro del ámbito evento 'conexión'. Intente eliminar el parámetro que está pasando al manejador de 'desconexión', debería poder trabajar con el parámetro de socket desde el manejador de conexión.

io.sockets.on('connection', function(socket) { 
    allClients.push(socket); 

    socket.on('disconnect', function() { 
     console.log('Got disconnect!'); 

     var i = allClients.indexOf(socket); 
     delete allClients[i]; 
    }); 
}); 

Aparte de eso, no es necesario un conjunto de tubo para la emisión, puede utilizar las salas a tomas de grupo y de difusión a todos los zócalos dentro de esa habitación.

+0

si necesito enviar datos del cliente al servidor como lo que hizo en 1er ¿no funcionará ninguna solución? –

Cuestiones relacionadas