5

我有一个代码,NodeJS 服务器读取文件并将其流式传输以响应,它看起来像:

var fStream = fs.createReadStream(filePath, {'bufferSize': 128 * 1024});
fStream.pipe(response);

问题是,Node 每次准确读取文件 40960 个字节。但是,如果我的应用程序一次读取 131072 (128 * 1024) 个字节,它的效率会高得多(由于不适用于此问题的原因)。

有没有办法强制 Node 一次读取 128 * 1024 字节?

4

2 回答 2

9

接受的答案是错误的。您可以使用highWaterMark选项 强制 Node 一次读取(128*1024)个字节。

var fStream = fs.createReadStream('/foo/bar', { highWaterMark: 128 * 1024 });

文档特别指出“可能缓冲的数据量取决于传递给流构造函数的 highWaterMark 选项。对于普通流,highWaterMark 选项指定总字节数。对于在对象模式下运行的流,highWaterMark 指定对象的总数。

另外,请参阅。默认缓冲区大小为 64 KiloBytes

于 2018-04-13T03:43:34.537 回答
0

我是新来的,所以请耐心等待......

我在节点的来源中找到了这个:

var toRead = Math.min(pool.length - pool.used, ~~this.bufferSize);

和:

var kPoolSize = 40 * 1024;

因此,无论您提供什么,似乎缓冲区大小都限制为 40kb。您可以尝试更改代码中的值并重建节点。不过,这可能不是一个非常可维护的解决方案......

于 2012-08-02T20:53:35.863 回答