Я пытаюсь лучше понять потоки в узле.
Что я делаю, так это преобразовываю дуплексный поток в обоих направлениях:
Upstream | | Transform | | Stream (PassThrough)
------------------------------------------------------------
[device] | --> | [decode] | --> | [output]
[device] | <-- | [encode] | <-- | [input]
const { Transform, PassThrough, Duplex } = require("stream");
function Adapter(upstream){
const stream = new PassThrough();
const encode = new Transform({
transform: (data, encoding, done) => {
// feedback
console.log("[encode] called");
done(null, data);
}
});
const decode = new Transform({
transform: (data, encoding, done) => {
// feedback
console.log("[decode] called");
done(null, data);
}
});
upstream.pipe(decode).pipe(stream);
stream.pipe(encode).pipe(upstream);
return stream;
}
Проблема с фрагментом кода выше заключается в том, что я пишу в свой собственный поток PassThrough, что приводит не к выводу, а к кодировке снова.
Мне нужен что-то вроде метода преобразования в дуплексном восходящем направлении для потока _readable
& _writable
.
Здесь вы найдете кое-что о методе _transform
: Реализация буферизованного потока преобразования но не в документах nodejs и не уверен, что он все еще поддерживается
Также я пытаюсь избежать собственной реализации дуплексного потока до тех пор, пока это не станет действительно необходимым.
Возможно ли что-то подобное?
Псевдокод:
function Adapter(upstream){
const wrapper = new Duplex();
wrapper._readableState = decode;
wrapper._writableState = encode;
upstream.pipe(decode);
wrapper.pipe(encode);
return wrapper;
}