在我的项目中,我有一个角度工厂,它将使用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
来阻止这种循环吗?
答案 0 :(得分:0)
事实证明这比我想象的要复杂一些。
首先,我没有使用上面显示的websocket服务,而是使用了这个:https://github.com/gdi2290/angular-websocket
内存泄漏仍然存在,但我注意到,在画布更新过程中,引用了一个没有被垃圾回收的imageObj.src
。
Chrome,opera和firefox似乎现在将使用的内存保持在合理的限制之内。