Трансформация потока - PullRequest
       32

Трансформация потока

0 голосов
/ 10 января 2020

Я пытаюсь лучше понять потоки в узле.

Что я делаю, так это преобразовываю дуплексный поток в обоих направлениях:

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;

}

...