2012-03-29 17 views
9

Ich benutze Nodejs und Socket.io. Wenn der Client eine Verbindung herstellt, werden neue JavaScript-Objekte erstellt.Entfernen von Objekten beim Trennen der Verbindung socket.io

Bleiben diese Objekte für immer? Sollten sie gelöscht oder entfernt werden, wenn der Client die Verbindung trennt? Ist es überhaupt möglich, ein Objekt zu entfernen? Ich weiß, dass Löschen nicht funktioniert ...

Danke - ich denke, das ist eher eine allgemeine Frage, und alle Vorschläge wären wirklich hilfreich.

Danke!

Antwort

17

Wenn Sie nicht aufräumen, dann ja, sie werden dort für immer bleiben, da ich annehme, dass Sie sie global machen.

Sie sollten Bereinigung sobald sich ein Benutzer die Verbindung trennt, indem zum disconnect Ereignis-Listener Bindung:

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

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

Großartig, danke! Ich nehme an, ich kann die gleiche Methode für "Kunden" verwenden, um auch andere Objekte zu verfolgen? Es gibt mehrere andere Objekte außerhalb der Socket-Funktionalität, die erstellt werden. – dzm

+0

jup! Was manche Leute machen, fügen sie die Objekte innerhalb der Variablen "socket" hinzu und sie wird automatisch zerstört. 'socket.data =" foo "' und dann haben die Clients nur eine ID zu diesem Socket. –

+0

Perfekt, das ist eine gute Idee. Danke noch einmal! – dzm

0

Ich denke, die akzeptierte Antwort ist nicht wirklich das Problem zu lösen. Wenn Sie das tun:

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

Socket-Ereignisse Zuhörer innerhalb io.on erstellt() 's Rückruf. Nach dem Trennen, erhalten diese Ereignisse Zuhörer nicht wirklich entfernt .. ich etwas tun soll:

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

Es sei denn, Socket.io intern alle eventlisenters im io.on() Callback entfernen. Eventlisteners persist

+0

Löschen ist im strikten Modus nicht erlaubt Gibt es einen anderen Weg, dies zu erreichen? –

Verwandte Themen