Node.js потоки не сбрасываются между использованиями.Как смывать? - PullRequest
0 голосов
/ 13 ноября 2018

У меня проблема с потоками / буферами Node.js, когда они не закрываются / не очищаются после первого использования.У меня есть поток чтения, созданный из fs.createReadStream, который я передаю в пользовательский поток записи.highWaterMark для каждого чанка составляет ~ 2 МБ (это важно).Когда я сначала передаю поток через файл ~ 3 МБ, он обрабатывается моим потоком в 2 блока, сначала блоком ~ 2 МБ, затем блоком ~ 1 МБ.Это ожидается.

Во втором файле, который я передаю, первый блок занимает всего ~ 1 МБ.Это проблема.Когда я складываю переданные байты, я вижу, что после первого файла ясно, что связанные потоки / буферы не были очищены должным образом.Это можно показать с помощью следующей математики:

Конечный фрагмент, который передается из первого файла, составляет 875 837 байт.Первый блок передаваемого файла next составляет 1221 316 байт (ожидается: 2 097 152 байт).Когда вы добавляете 875 837 к 1 211 316, вы получаете 2 097 153, что является высшей отметкой, о которой я упоминал ранее (с отключением на одну ошибку).

Вот код, который я получил:

return new Promise(async (resolve, reject) => {
    const maximalChunkedTransferSize = 2*1024*1024; // 2MB (Minimum amount, Autodesk recommends 5MB).

    const pathToFile = await bucketManagement.locationOfBucketZip(bucketEntity.name);
    let readFileStream = fs.createReadStream(pathToFile, { highWaterMark: maximalChunkedTransferSize });

    let writeStream = new HttpAutodeskPutBucketObjectWriteStream(accessToken, bucketEntity);
    readFileStream.pipe(writeStream);

    writeStream.on("finish", () => {
        resolve(writeStream.urn);
    });
    writeStream.on("error", err => reject("Putting the file into the bucket failed. " + err.message));
});

Я пытался вызвать .destroy() в потоке чтения и записи.Я пытался позвонить .end(), .unpipe().Ни один из них не сработал.Как я могу уничтожить / очистить поток и / или нижележащий буфер так, чтобы первый блок следующего файла был ожидаемым 2 МБ?

...