socketjs上的nodejs二进制流产生额外的数据大小

时间:2015-07-13 11:38:08

标签: node.js sockets streaming

我正在尝试通过套接字将图像从服务器流式传输到客户端,如果没有断开连接重新连接,它可以正常工作但如果我确实断开了重新连接的代码,我意识到大小增加。

这是代码示例

服务器端

    socket.on('get file', function () {
    path = '../../../default/files/20141120_191129_0.jpg';
    fs.stat(path, function (err, stat) {
        if (err) {
            console.log(err);
        }

        stream = fs.createReadStream(path,
                {encoding: 'binary'});

        stream.on('data', function (data) {
            socket.emit('file', {"data": data, "size" : stat.size})
        });
        console.log(stat.size);
    });

});

客户方 这段代码工作正常,日志显示少于100%(上传进度)

console.log结果95.1968693802965 % chat (line 201) 2065278 chat (line 208) 1966080 chat (line 209) 98.37009835963973 % chat (line 201) 2065278 chat (line 208) 2031616 chat (line 209) 2065278

       socket.on('connect', function () {
        setTimeout(function () {
            socket.emit('get file');
        }, 1000);
    });

    var base64string = '';
    var i =0;

    socket.on('file', function (data) {i++;
        console.log((base64string.length / data.size) * 100+" %");

        base64string += data.data;
        if(data.size == base64string.length){
          buildimage(base64string);  
        }
    })
    function buildimage(base64str) {
        console.log(base64str.length);
        $("#img").attr("src", 'data:image/png;base64,' + btoa(base64str));
    }

但如果我更改了客户端以断开重新连接它失败并且二进制数据大小大于原始图像大小

console.log结果142.79530407044476 % chat (line 201) 2065278 chat (line 208) 2949120 chat (line 209) 145.96853304978796 % chat (line 201) 2065278 chat (line 208) 3014656

        socket.on('connect', function () {
        $('#chat').addClass('connected');
        setTimeout(function () {
            socket.emit('get file');
        }, 1000);
    });


    var base64string = '';
    var i =0;
    socket.on('file', function (data) {i++;
        console.log((base64string.length / data.size) * 100+" %");
    if (i == 15) {
      socket.disconnect();
      console.log('disconnected');
      socket.connect();
    }

    console.log(data.size);
        console.log(base64string.length);
        base64string += data.data;
        if(data.size == base64string.length){
          buildimage(base64string);  
        }

    })

    function buildimage(base64str) {
        console.log(base64str.length);
        $("#img").attr("src", 'data:image/png;base64,' + btoa(base64str));
    }

为什么在断开重新连接时可变大小会增加,这会导致错误的进度跟踪

0 个答案:

没有答案