我发现当手动断开套接字时,套接字并没有在套接字 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];
}
关于javascript - 使用 socket.io 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9597692/