#node.js #stream #backpressure
Вопрос:
Во время разработки TransformStream я обнаружил много ненужных событий утечки (ложный ответ на запись или нажатие). Я извлек минимальную демонстрацию ситуации:
// node -v
// v16.11.1
import { PassThrough } from 'stream';
import { createReadStream, createWriteStream } from 'fs';
const pt = new PassThrough({highWaterMark: 64 * 1024});
pt.on('drain', () => console.log('drain event'));
createReadStream('./inp.bin', {
highWaterMark: 64 * 1024 - 1 // <-- remove - 1 here
})
.pipe(pt)
.pipe(createWriteStream('./out.bin', {highWaterMark: 64 * 1024}));
Если я удалю часть -1 из параметра ReadStream highWaterMark, начнут происходить события слива. С буфером потока чтения на один байт меньше, это не так. Такая же ситуация и с любыми другими размерами буфера.
Это ошибка или особенность? Каковы оптимальные значения высокой температуры в трубе?