javascript - 使用 socket.io 的内存泄漏

标签 javascript node.js memory-leaks socket.io

我发现当手动断开套接字时,套接字并没有在套接字 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/

相关文章:

javascript - 使用 Passport 通过 Token 进行身份验证,如果 Token 失败则通过 Session 进行身份验证?

java - Apache TomEE 内存泄漏

javascript/jquery - 用户关闭浏览器时的跨浏览器检测?

node.js - Twiml POST 请求上的参数为空

javascript - jQuery tmpl 和 DataLink 测试版

node.js - s3 中存储的某些图像无法在 Safari 中加载

ios - 如何修复 _NSCFNumber 的 iOS 内存泄漏?

Node.js 请求内存泄漏

javascript - 无法从 GMap v3 隐藏标记

javascript - 使用低破折号/下划线从 _.pluck 获取对象