内存泄漏使用socket.io

Dan*_*Dan 7 javascript memory-leaks node.js socket.io

我发现在手动断开连接时套接字io服务器端没有完全销毁套接字.我在github上发现这个主题很有用.虽然我正在寻找一些阻止GC清理套接字的变量链接,但我在这里问一个问题.

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

代码不起作用:

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

///...................

socket.disconnect();
Run Code Online (Sandbox Code Playgroud)

但是,解决方法是使用受限制的库字段:

delete io.sockets[url];
io.j = [];
Run Code Online (Sandbox Code Playgroud)

Gon*_*ira 1

实际上,这是按预期工作的,当您断开套接字时,您只需声明您现在不希望从该套接字接收更多数据,要真正销毁套接字,您基本上会执行该操作delete socket。在断开连接事件上使用它,即:

socket.on('disconnect', function(){
    delete socket; 
})
Run Code Online (Sandbox Code Playgroud)

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

function deleteSocket(socketID){
    delete io.sockets.sockets[socketID];
}
Run Code Online (Sandbox Code Playgroud)

  • 您只能“删除”对象的属性,而不能删除对象本身 (5认同)