NodeJS net.socket Pipe по условию/фильтру

Я новичок в NodeJS. Существующий канал net.socket необходимо фильтровать по условию, чтобы не подключаться к «con2», мой существующий код выглядит следующим образом.

Я нашел методы Transform и PipeLine, и пока я пробовал, пример кода еще не работает для моего сценария.

Условие: в данных потока чтения "con1" есть ключевое слово. например "Вывод" Затем не подключать или преобразовывать данные как пустые в "con2". Так что, "con2" не обрабатывать.

Start.js

      import Proxy from "./Proxy.js";

const proxy = Proxy();
  proxy.listen('4000');

Прокси.js

      import net from "net";

export default () =>
    net.createServer((con1) => {
        const con2 = net.connect(
          '1234',
          '127.0.0.1'
        );
        
        con1.pipe(con2).pipe(con1);
    
        con2.on("data", async (data) => {
          try {
                console.log("sent from con2:", data);
               }
          }
        }
        con1.on("data", async (data) => {
          try {
                console.log("sent from con1:", data);
               }
          }
        }

Пожалуйста, помогите советом. Заранее большое спасибо.

1 ответ

Я кое-что собрал:

      const net = require("net");

const { Transform, pipeline } = require("stream");


const spy = (client) => {
    return new Transform({
        transform(chunk, encoding, cb) {
            if (chunk.toString("utf-8").includes("output")) {

                cb(new Error("ABORTED!"));

            } else {

                cb(null, chunk);

            }
        }
    });
};


let server = net.createServer((socket) => {

    const client = net.connect('1234', '127.0.0.1');

    pipeline(socket, spy(client), client, (err) => {
        console.log("pipeline closed", err);
    });

});

server.listen(1235, "127.0.0.1", () => {
    console.log("Go and send something to the tcp socket, tcp://127.0.0.1:1235")
});

Запустим простой сервер netcat, чтобы посмотреть, что мы туда отправляем:

      while true; do nc -l -p 1234; done;

Теперь, когда мы подключаемся к другому netcat, мы можем отправлять данные через прокси другому экземпляру netcat:

      nc 127.0.0.1 1235

Когда мы теперь отправляем ключевое слово «output», соединение прерывается/завершается.

Шпионские функции просто проверяют фрагмент, который проходит через поток преобразования в конвейере, и проверяет строку «выход», если она найдена, конвейер закрывается, и оба клиентских сокета/соединения разрываются.

Другие вопросы по тегам