2013-07-18 2 views
0

У меня есть служба, непрерывно отправляющая данные через сокет.Node js stream file

Данные, полученные после того, как некоторое время выглядит следующим образом:

{base64} \n {base64} \n {base64} ... 

Где {base64} представляет данные изображения.

Как управлять потоком данных, чтобы я мог получать одно изображение за раз (в правильном порядке) и делать с ним что-то полезное.

Прямо сейчас я просто передаю его в файл, но я уверен, что есть лучший способ, чем начать разбор файла для разделителей и фактически реализовать механизм обратного давления.

var streamRaw = fs.createWriteStream('raw.data'); 
socket.pipe(streamRaw, {end:false}); 

ответ

0

Я бы ссылаться substack's example here:

var offset = 0; 

socket.on('readable', function() { 
    var buf = socket.read(); 
    if (!buf) return; 
    for (; offset < buf.length; offset++) { 
     if (buf[offset] === 0x0a) { 
      //you have buffered a full image as a base64 string, 
      // process it, or emit it as an event 
      processImageData(buf.slice(0, offset).toString()); 
      buf = buf.slice(offset + 1); 
      offset = 0; 
      socket.unshift(buf); 
      return; 
     } 
    } 
    socket.unshift(buf); 
}); 

Вы также можете думать о потоковые как Transform поток, который читает ломти сокет в данных и излучающего целые наборы данных base64 изображения по мере их поступления.