Всем привет! В этом материале рассмотрим, что такое pipes в NodeJS , в чем преимущества и как это использовать.

NodeJS. Что такое pipe().

Всем привет! В этом материале рассмотрим, что такое pipes в NodeJS, в чем преимущества и как это использовать.

Описание

Для начала давайте вспомним, что мы делали в прошлой статье. Мы создали поток для чтения и поток для записи, считывали данные в потоке для чтения с файла readMe.txt, слушали событие на получение данных и, как только оно срабатывало, мы использовали поток для записи, чтобы загрузить информацию, полученную с файла readMe.txt в файл writeMe.txt.

Этот процесс, где мы считываем данные с одного потока и записываем их в другой, в NodeJS встречается достаточно часто, и поэтому была придумана такая штука как pipes.

Что такое pipes

Это элегантное решение, которое позволяет собирать кусочки информации в буфер и, когда он заполнен, сразу отправлять их в поток для чтения, минуя событие получения данных, которое мы писали в прошлый раз.

Давайте теперь перепишем наш предыдущий код с использованием pipe:

var myReadStream = fs.createReadStream(__dirname + '/readMe.txt', 'utf8');
var myWriteStream = fs.createWriteStream(__dirname + '/writeMe.txt');
myReadStream.pipe(myWriteStream);

Если вы запустите этот код, то увидите, что он работает так же, как и раньше.

Отправка данных клиенту

Теперь вспомним наш сервер, который мы тоже уже писали в одной из статей. Сейчас он нам пригодится, чтобы таким же образом, как мы делали это с файлами, отправлять данные напрямую пользователю. Давайте сразу перейдем к коду:

var server = http.createServer(function(request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  var myReadStream = fs.createReadStream(__dirname + '/readMe.txt', 'utf8');
  myReadStream.pipe(response);
});

server.listen(3000, '127.0.0.1');
console.log('Прослушивание порта 3000');

Здесь мы создаем сервер, отправляем заголовки, а также данные при помощи метода pipe() клиенту по адресу 127.0.0.1:3000.

Если вы теперь запустите код и перейдете по адресу выше, то увидите те данные, что были в файле readMe.txt.

В чем преимущества данного подхода

Как вы уже, наверное, заметили, первое преимущество – это лаконичность кода. Нам теперь не нужно писать несколько потоков, писать для них события и отслеживать данные. Написали всего лишь один метод, и все работает.

Второе преимущество – это производительность. Поскольку данный метод уже встроен в платформу NodeJS, то он достаточно хорошо оптимизирован и, следовательно, используя его, вы повышаете производительность своего приложения.

Заключение

Итак, сегодня мы рассмотрели, что такое pipe в NodeJS, в чем его преимущества и как использовать данный метод.

Спасибо за внимание!