node.js - nodejs binary streaming on socket disconnection produce extra size of data -


i trying stream images on sockets server client , works ok if no disconnect reconnect occurs if did disconnect reconnect in code realized size increase.

here code sample

server side

    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);     });  }); 

client side piece of code works fine , logs shows less 100% (upload progress)

console.log results 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 =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));     } 

but if changed client side disconnect reconnect fails , binary data size bigger original image size

console.log results 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 =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));     } 

why variable size increased when disconnect reconnect happen gives wrong progress tracking

the problem when disconnect/reconnect happens createreadstream starts reading file beginning, have set start value based on the length of variable storing file on client side

simple changes needed make work

client side

            settimeout(function () {             // send variable length starting reading point             socket.emit('get file', {start: base64string.length});         }, 1000); 

server side

   socket.on('get file', function (options) {     path = '../../../default/files/20141120_191129_0.jpg';      fs.stat(path, function (err, stat) {         if (err) {             console.log(err);         } //take starting reading point start reading         stream = fs.createreadstream(path, {encoding: 'binary', start: options.start}); 

Comments