Angularjs websocket服务内存泄漏

Angularjs websocket service memory leak

本文关键字:泄漏 内存 服务 websocket Angularjs      更新时间:2023-09-26

在我的项目中,我有一个angular工厂,它将照顾与c++应用程序的websocket连接。

websocket工厂结构:

.factory('SocketFactory', function ($rootScope) {
    var factory = {};
    factory.connect = function () {
        if(factory.ws) { return; }
        var ws = new WebSocket('ws://...');
        ws.onopen = function () {
            console.log('Connection to the App established');
        };
        ws.onerror = function () {
            console.log('Failed to established the connection to the App');
        };
        ws.onclose = function () {
            console.log('Connection to the App closed');
        };
        ws.onmessage = function (message) {
            //do stuff here
        };
        factory.ws = ws;
    };
    factory.send = function (msg) {
        if(!factory.ws){ return; }
        if(factory.ws.readyState === 1) {
            factory.ws.send(JSON.stringify(msg));
        }
    };
    return factory;
});

c++应用程序将通过websockets发送图像,它们将显示在画布中,每次收到新图像时都会更新。

一切都很好,但是当我开始向浏览器发送图像时,我注意到在ubuntu的系统资源监视器中,每次ws.onMessage被触发时,chrome进程使用的内存不断增加+/-5mb(大约)。

我注释了ws.onMessage内部的代码,只留下事件检测,没有其他任何内容,使用的内存仍然增加,如果我注释整个ws.onMessage事件,使用的内存保持在正常范围内。

你有什么建议来解决这个问题吗?这是因为我应该使用$destroy来防止这种循环吗?

结果比我想象的更令人困惑。

首先,我没有使用上面所示的websocket服务,而是使用了这个:https://github.com/gdi2290/angular-websocket

内存泄漏仍然存在,但我注意到,在画布更新过程中,有一个对imageObj.src的引用没有被垃圾收集。

Chrome, opera和firefox现在似乎将已使用内存保持在合理的范围内。