2012-03-07 22 views
6

He encontrado que las tomas no se destruyen completamente en el lado del servidor socket io al desconectarlas manualmente. He encontrado this topic on github útil. Mientras busco algunos enlaces variables que eviten que GC limpie tomas, estoy haciendo una pregunta aquí.Fugas de memoria usando socket.io

Si alguien aquí encuentra el mismo problema, sería de mucha ayuda.

el código que no funciona:

socket.on('disconnect', function(){ 
    socket.removeAllListeners(); 
}); 

///................... 

socket.disconnect(); 

solución que, sin embargo, utiliza los campos de la biblioteca restringidas:

delete io.sockets[url]; 
io.j = []; 

Respuesta

1

realidad, esto funciona según lo previsto, al desconectar un enchufe simplemente indique que no espera recibir más datos de ese socket en este momento, para realmente destruir el socket, básicamente realiza la acción delete socket. Utilice esto en caso de desconexión, es decir:

socket.on('disconnect', function(){ 
    delete socket; 
}) 

también se puede hacer esto en las io.sockets.sockets objeto en una función externa:

function deleteSocket(socketID){ 
    delete io.sockets.sockets[socketID]; 
} 
+4

que sólo puede 'atributos de los objetos y delete' no el objeto en sí – buley

+0

io.sockets.sockets [socketID] aún se elimina. –