2012-03-29 148 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

相关问题