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
Post a Comment