首页 > 解决方案 > 努力理解可读流上的 highWaterMark

问题描述

我看到一些我对 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 个字节。并不是说 65kb 大小不好,这很好。我只是希望我了解发生了什么,以及是否可以限制缓冲区大小。

标签: node.jsbusboynode-streams

解决方案


推荐阅读