【问题标题】:Memory leaks using socket.io使用 socket.io 的内存泄漏
【发布时间】:2012-03-24 18:10:37
【问题描述】:

我发现手动断开套接字时,套接字 io 服务器端的套接字并未完全销毁。我发现this topic on github 很有用。虽然我正在寻找一些阻止 GC 清理套接字的变量链接,但我在这里提出了一个问题。

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

不起作用的代码:

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

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

socket.disconnect();

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你只能delete对象的属性而不是对象本身
    • io.sockets.sockets[socketID] 仍然被删除。
    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 2012-10-19
    • 2012-05-05
    相关资源
    最近更新 更多