客户端将所有图像永久存储在数据流中

时间:2014-02-18 13:20:27

标签: javascript node.js websocket socket.io

我正在实施一个节点服务器,它定期从网络摄像头抓取图像并通过节点模块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);
      };
    });

收到下一个文件后,是否无法删除每个文件?

1 个答案:

答案 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];
});

这应该可以解决内存泄漏问题。但是,您可能需要进行一些测试以确认它不会破坏其他任何内容......