使用socket.io内存泄漏

Memory leaks using socket.io

本文关键字:泄漏 内存 io socket 使用      更新时间:2023-09-26

我发现在手动断开套接字连接时,套接字在套接字io服务器端并没有完全销毁。我发现github上的这个主题很有用。当我在寻找一些阻止GC清理套接字的可变链接时,我在这里提出了一个问题。

如果这里有人遇到同样的问题,这将是很大的帮助。

不起作用的代码:

socket.on('disconnect', function(){
    socket.removeAllListeners();
});
///...................
socket.disconnect();

然而,解决方法使用了受限的库字段:

delete io.sockets[url];
io.j = [];

实际上,这是按预期工作的,当您断开一个套接字时,您只需声明您现在不希望从该套接字接收更多数据,就可以实际销毁套接字,您基本上是执行delete socket操作。在断开连接事件中使用此选项,即:

socket.on('disconnect', function(){
    delete socket; 
})

您也可以在外部函数的io.sockets.sockets对象上执行此操作:

function deleteSocket(socketID){
    delete io.sockets.sockets[socketID];
}