0

ソケットを介して継続的にデータを送信するサービスがあります。

しばらくしてキャプチャされたデータは次のようになります。

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

{base64}は画像データを表す。

一度に 1 枚の画像を (正しい順序で) 取得し、それを使って何か役に立つことができるように、データ フローを制御するにはどうすればよいでしょうか。

今はそれをファイルにパイプするだけですが、ファイルの区切り文字の解析を開始し、実際に自分で背圧メカニズムを実装するよりも良い方法があると確信しています。

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

1 に答える 1

0

ここでサブスタックの例を参照します。

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

また、ストリームを、ソケットのデータのチャンクを読み取り、到着時に base64 イメージ データのセット全体を出力する変換ストリームと考えることができます。

于 2013-07-18T00:49:32.450 に答える