我发现,当手动断开套接字时,套接字在io服务器端并没有完全销毁。我发现this topic on github有用。当我在寻找一些防止GC清洁套接字的变量链接时,我在这里提出了一个问题。
如果这里有人遇到同样的问题,这将大有帮助。
无效的代码:
socket.on('disconnect', function(){
socket.removeAllListeners();
});
///...................
socket.disconnect();
但是,使用受限库字段的解决方法:
delete io.sockets[url];
io.j = [];
最佳答案
实际上,这是按预期方式工作的,当您断开套接字的连接时,您只是声明您现在不希望再从该套接字接收任何数据,而实际上要破坏该套接字,基本上就可以执行delete socket
Action 。在断开连接事件上使用它,即:
socket.on('disconnect', function(){
delete socket;
})
您还可以在外部函数的io.sockets.sockets对象上执行此操作:
function deleteSocket(socketID){
delete io.sockets.sockets[socketID];
}