Ребят, помогите советом плс. Есть очень большой файл, мне нужно его построчно прочитать и отправить по сокетам в jsone. Если упростить это выглядит примерно так:
const dataStream = await getDataStream() // реквест к источнику, возвращает response.pipe(transformStream);
dataStream.on('data', async () => {
const normalized = this.adapt(data);
if (normalized) {
dataStream.pause(); // костыль, хочу понять к это работает вообще. Чтение стрима должно прекращаться по идее.
await socket.write(normalized);
dataStream.resume();
}
this.saveProgress(); // сохраняю номер прочитанной строчки
});
локально запускаю сокет сервер и пытаюсь распарсить строки, приходит где-то 80% валидных JSON строк, утечек нет. Но приходит всего 3кк строк из 15кк (не учитывая сколько из них невалидных), чтение стрима прекращается. А если выставить синхронную задержку на сокет сервере в 100мс, то почти все строки будут невалидные и их будет всего 100-200к (на этот момент стрим уже сохранит 15кк строчку как прочитанную) . Как можно реализовать это нормально, какие подводные камни, если стрим спешит читать данные, то почему нет утечек?
Может можно как-то пайпить напрямую в сокет, но чтобы строчки были валидные?