我正在编写一个模块,它是一个可写流。我想为我的用户实现管道接口。
如果发生错误,我需要暂停可读流并发出错误事件。然后,用户将决定 - 如果他可以处理这个错误,他应该能够恢复数据处理。
var writeable = new BackPressureStream();
writeable.on('error', function(error){
console.log(error);
writeable.resume();
});
var readable = require('fs').createReadStream('somefile.txt');
readable.pipe.(writeable);
我看到Node提供了readable.pause()
方法,可以用于暂停可读流。但我不知道如何从我自己的可写流模块中调用它:
我想请问如何在我的可写流模块中使用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');
}
如何在可写流中实现反压?P.S. 可以使用pipe/unpipe事件,该事件提供可读流作为参数。 但是也有人说,对于已连接的流,暂停的唯一机会是从可写流中取消连接的可读流。
我理解正确吗? 直到用户调用resume之前,我必须取消连接我的可写流吗? 用户调用resume后,我应该将可读流重新连接吗?