我正在实施一个节点服务器,它定期从网络摄像头抓取图像并通过节点模块Delivery.js将它们发送到客户端。
但是,查看浏览器使用的资源(在Chrome开发工具中),似乎发送的每个图像都是由客户端(或者可能是服务器)无限期存储的。
我使用的代码类似于Delivery.js自述文件中的“将文件推送到客户端”示例:
服务器代码
//set the camera to take a snapshot and send it for the required framerate
setInterval(function(){
//take a snapshot of the current view
cam.snapshot('./current_view.jpg' ,function( jpeg ) {
//send this snapshot to client
delivery.send({
name: 'current_view.jpg',
path : './current_view.jpg'
});
})
delivery.on('send.success',function(file){
//console.log('File successfully sent to client');
});
}, cameraUpdateDelay);
客户代码
var delivery = new Delivery(socket);
delivery.on('receive.start',function(fileUID){
//console.log('receiving a file!');
});
delivery.on('receive.success',function(file){
if (file.isImage()) {
//change the src of the img tag to the new file
$('img').attr('src', file.dataURL());
console.log(file);
};
});
收到下一个文件后,是否无法删除每个文件?
答案 0 :(得分:0)
我只是快速浏览了客户端来源,并将每个收到的图像添加到一个对象中,图像的uuid是关键。如果要限制内存泄漏,可能需要在收到对象后从对象中删除图像。在https://github.com/liamks/Delivery.js/blob/master/lib/client/delivery.js的第140行,它被添加到对象中:
_this.receiving[file.uid] = filePackage;
在其上方,如果您修改了“接收。成功'”,则显示如下:
pubSub.subscribe('receive.success',function(filePackage){
_this.socket.emit('send.success',filePackage.uid);
delete _this.receiving[filePackage.uid];
});
这应该可以解决内存泄漏问题。但是,您可能需要进行一些测试以确认它不会破坏其他任何内容......