2012-03-07 18 views
6

Ho trovato che i socket non sono completamente distrutti sul lato socket io server quando li disconnetto manualmente. Ho trovato utile this topic on github. Mentre sto cercando alcuni collegamenti variabili che impediscono a GC di pulire socket, sto facendo una domanda qui.Perdite di memoria tramite socket.io

Se qualcuno ha riscontrato lo stesso problema, questo sarebbe di grande aiuto.

il codice che non funziona:

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

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

socket.disconnect(); 

Soluzione che, comunque, utilizza campi di libreria ristretti:

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

risposta

1

in realtà, questo funziona come previsto, quando si scollega una presa è sufficiente dichiaro che non ti aspetti di ricevere più dati da quel socket in questo momento, per distruggere effettivamente il socket in pratica esegui l'azione delete socket. Utilizzare questa sull'evento disconnessione, vale a dire:

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

si può anche fare questo sui io.sockets.sockets oggetto su una funzione esterna:

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

si può solo 'attributi delete' di oggetti e non l'oggetto stesso – buley

+0

io.sockets.sockets [socketID] è ancora cancellato. –