Изо всех сил пытается понять highWaterMark на Потоке с возможностью чтения - PullRequest
1 голос
/ 30 мая 2019

Я наблюдаю некоторое поведение, которое я не понимаю в свойстве busboy и потоков узлов highWaterMark.Я ожидал бы, что размер чанков максимально равен значению highWaterMark, но размер чанка выглядит незатронутым настройкой highWaterMark.

Я установил параметр fileHwm: 5 в busboy, и у меня есть экспрессмаршрут настроен примерно так

app.post('/upload', function(req, res, next) {
  req.pipe(req.busboy); // Pipe it through busboy
  req.busboy.on('file', (fieldname, file, filename) => {
      console.log(`Upload of '${filename}' started`);
      console.log(file);
      file.on('readable', () => {
        let chunk;
        while (null !== (chunk = file.read())) {
          console.log(`Received ${chunk.length} bytes of data.`);
        }
      });

  });
});

, когда я регистрирую file, он выглядит нормально, и я вижу, что свойство highWaterMark было красиво установлено

FileStream {
  _readableState:
   ReadableState {
     objectMode: false,
     highWaterMark: 5,
...

, но размеркуски, которые я выхожу, не 5, как я ожидал - вместо этого я вижу

Received 65395 bytes of data.
Received 65536 bytes of data.
Received 65536 bytes of data.
Received 65536 bytes of data.

Так что дает?Я ожидал, что read будет возвращать только 5 байтов за раз.Не то, чтобы 65 КБ - плохой размер, это нормально.Хотелось бы, чтобы я понял, что происходит, и если бы было возможно ограничить размер буфера.

...