tg-me.com/nodejs_lib/345
Last Update:
Потоки записи в Node.js — практическое руководство
Node.js предоставляет мощную абстракцию ввода-вывода — Streams (потоки), которые позволяют эффективно обрабатывать данные частями, особенно когда речь идёт о больших объёмах данных. В этом руководстве мы сосредоточимся на Writable Streams — потоках, в которые можно записывать данные.
Что такое Writable Stream?
Writable Stream — это абстракция для источника данных, в который можно записывать. Примеры:
- fs.createWriteStream()
— запись в файл
- http.request()
— отправка HTTP-запросов
- net.Socket
— запись в TCP-сокет
- process.stdout
— вывод в консоль
Основные методы и события
Метод .write(chunk, [encoding], [callback])
Используется для записи данных в поток. Возвращает true
, если поток готов принять ещё данные, иначе — false
.
const fs = require('fs');
const stream = fs.createWriteStream('output.txt');
const result = stream.write('Hello, world!');
console.log(result); // true или false
Метод
.end([chunk], [encoding], [callback])
Завершает поток. При необходимости можно передать финальный кусок данных.
stream.end('Final data');
События
-
drain
— вызывается, когда поток снова готов к записи (если ранее вернул false
).-
finish
— вызывается после завершения записи (после .end()
).-
error
— при возникновении ошибки.
stream.on('finish', () => console.log('Запись завершена.'));
stream.on('error', err => console.error('Ошибка:', err));
Управление потоком вручную
Когда
stream.write()
возвращает false
, это означает, что внутренний буфер переполнен. Чтобы избежать перегрузки, стоит дождаться события drain
:
function writeMany(stream, data, times) {
let i = 0;
function write() {
while (i < times) {
const ok = stream.write(data);
if (!ok) {
stream.once('drain', write);
return;
}
i++;
}
stream.end();
}
write();
}
writeMany(fs.createWriteStream('big.txt'), 'data\n', 10000);
Пользовательские Writable Streams
Вы можете создать свой Writable Stream, расширив
Writable
из модуля stream
:
const { Writable } = require('stream');
class Logger extends Writable {
_write(chunk, encoding, callback) {
console.log(`LOG: ${chunk.toString()}`);
callback();
}
}
const logger = new Logger();
logger.write('Hello\n');
logger.end('Bye\n');
Итого
Writable Streams — ключевой инструмент в Node.js для эффективной записи данных. Они позволяют управлять потоком, обрабатывать ошибки и даже создавать свои реализации.
https://pavel-romanov.com/writable-streams-in-nodejs-a-practical-guide
✍️ @nodejs_lib
BY Node JS
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/nodejs_lib/345