2012-03-29 122 views
9

我正在使用Nodejs和Socket.io。當客戶端連接時,將創建新的JavaScript對象。在斷開連接的情況下移除對象socket.io

做這些東西只是永遠留戀嗎?當客戶端斷開連接時它們是否應該被刪除或刪除?是否有可能刪除一個對象?我知道刪除將無法正常工作...

謝謝 - 我想這是一個更普遍的問題,任何建議都會非常有幫助。

謝謝!

回答

17

如果你沒有清理,那麼是的,他們會永遠呆在那裏,因爲我認爲你讓他們成爲全球。

你應該清理一次,用戶斷開通過綁定到disconnect事件偵聽器:

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

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

太好了,謝謝!我假設我可以使用同樣的方法來處理'客戶'以跟蹤其他對象嗎?在'套接字'功能之外還有其他幾個對象被創建。 – dzm 2012-03-29 03:46:46

+0

jup!有些人做的,他們在「套接字」變量內添加對象,並自動銷燬。 'socket.data =「foo」'然後客戶端只有一個id到那個套接字。 – 2012-03-29 04:27:08

+0

完美,這是一個好主意。再次感謝! – dzm 2012-03-29 13:17:57

0

我想接受的答案是不是真正解決問題。 當你這樣做:

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

套接字事件偵聽器io.on內()創建的回調。斷開後,這些事件監聽器沒有真正得到刪除.. 我應該做這樣的事情:

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

除非socket.io內部取出io.on內的所有eventlisenters()回調。 Eventlisteners堅持

+0

在嚴格模式下不允許刪除是否有另一種方法來實現這一點? – 2017-03-24 14:32:38

相關問題