2012-03-29 24 views
9

Estoy usando Nodejs y Socket.io. Cuando el cliente se conecta, se crean nuevos objetos de JavaScript.Eliminar objetos al desconectar socket.io

¿Estos objetos simplemente permanecen para siempre? ¿Deberían eliminarse o eliminarse cuando el cliente se desconecta? ¿Es posible eliminar un objeto? Sé que eliminar no funcionará ...

Gracias - Supongo que esta es una pregunta más general y cualquier sugerencia sería realmente útil.

Gracias!

Respuesta

17

Si no realiza la limpieza, entonces sí, se quedarán allí para siempre ya que supongo que los está haciendo globales.

Usted debe limpiar una vez que un usuario se desconecta por la unión al oyente disconnect evento:

var clients = {} 
sockets.on('connection', function(socket) { 
    clients[socket.id] = socket; 

    socket.on('disconnect', function() { 
    delete clients[socket.id]; 
    }); 
}); 
+1

Genial, gracias! ¿Asumo que puedo usar el mismo método para 'clientes' para hacer un seguimiento de otros objetos también? Hay muchos otros objetos fuera de la funcionalidad 'socket' que se crean. – dzm

+0

jup! Lo que algunas personas hacen, agregan los objetos dentro de la variable "socket" y se destruye automáticamente. 'socket.data =" foo "' y luego los clientes solo tienen un id para ese socket. –

+0

Perfecto, esa es una buena idea. ¡Gracias de nuevo! – dzm

0

Creo que la respuesta no es aceptado realmente la solución del problema. Al hacer: eventos

io.on('connection', function(socket){ 
    socket.on('event', function(){ 
     console.log('event fired'); 
    }); 
    socket.on('disconnect', function(){ 
     console.log('user disconnected'); 
    }); 
}); 

socket oyentes se crean dentro de io.on (devolución de llamada) 's. Después de la desconexión, estos eventos oyentes no se eliminan realmente .. supone hacer algo como esto:

socket.on('disconnect', function(){ 
    delete socket.namespace.sockets[this.id]; 
    console.log('user disconnected'); 
}); 

A menos socket.io devolución de llamada internamente eliminar todos los eventlisenters dentro del io.on(). Eventlisteners persisten

+0

borrar no está permitido en modo estricto ¿hay otra manera de lograr esto? –

Cuestiones relacionadas