我发现,当手动断开套接字时,套接字在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];
}

10-06 02:00