18

書き込み可能なストリームであるモジュールを作成しています。ユーザーのためにパイプ インターフェイスを実装したいと考えています。

エラーが発生した場合は、読み取り可能なストリームを一時停止してエラー イベントを発行する必要があります。次に、ユーザーが決定します。エラーが発生しても問題がなければ、データ処理を再開できるはずです。

var writeable = new BackPressureStream();
writeable.on('error', function(error){
    console.log(error);
    writeable.resume();
});

var readable = require('fs').createReadStream('somefile.txt');
readable.pipe.(writeable);

ノードがreadable.pause()、読み取り可能なストリームを一時停止するために使用できるメソッドを提供していることがわかります。しかし、書き込み可能なストリーム モジュールから呼び出す方法がわかりません。

var Writable = require('stream').Writable;

function BackPressureStream(options) {
    Writable.call(this, options);
}
require('util').inherits(BackPressureStream, Writable);

BackPressureStream.prototype._write = function(chunk, encoding, done) {
    done();
};

BackPressureStream.prototype.resume = function() {
    this.emit('drain');
}

書き込み可能なストリームでどのようにバック プレッシャーを実装できますか?

PSpipe/unpipeパラメータとして読み取り可能なストリームを提供するイベントを使用することができます。しかし、パイプされたストリームの場合、一時停止する唯一の機会は、書き込み可能なストリームから読み取り可能なストリームをアンパイプすることであるとも言われています。

私はそれを正しく理解しましたか?ユーザーの呼び出しが再開されるまで、書き込み可能なストリームをアンパイプする必要がありますか? そして、ユーザー呼び出しが再開された後、読み取り可能なストリームをパイプで戻す必要がありますか?

4

3 に答える 3