Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Nodejs自定义流写入长度_Javascript_Node.js_Performance_File Upload_Stream - Fatal编程技术网

Javascript 使用Nodejs自定义流写入长度

Javascript 使用Nodejs自定义流写入长度,javascript,node.js,performance,file-upload,stream,Javascript,Node.js,Performance,File Upload,Stream,这可能已经在网站上的某个地方得到了回答,但如果是,我就找不到了。我也找不到问题的确切答案,或者至少无法理解如何基于Node.js官方文档实现解决方案 问题:在将可读流输入到文件中时,是否可以自定义每次磁盘写入的长度(以字节为单位) 我将上传大文件~50Gb,可能会有很多客户同时这么做。为了实现这一点,我将在客户端对文件进行切片,然后一次上载一个块。理想情况下,我希望服务器端的磁盘物理写入以1Mb的部分进行,但这可能吗?如果可能的话,如何实现呢?你可能会。虽然没有在中记录,但任何都会在何时刷新其缓

这可能已经在网站上的某个地方得到了回答,但如果是,我就找不到了。我也找不到问题的确切答案,或者至少无法理解如何基于Node.js官方文档实现解决方案

问题:在将可读流输入到文件中时,是否可以自定义每次磁盘写入的长度(以字节为单位)

我将上传大文件~50Gb,可能会有很多客户同时这么做。为了实现这一点,我将在客户端对文件进行切片,然后一次上载一个块。理想情况下,我希望服务器端的磁盘物理写入以1Mb的部分进行,但这可能吗?如果可能的话,如何实现呢?

你可能会。虽然没有在中记录,但任何都会在何时刷新其缓冲区时使用highWaterMark选项。另见

所以只是

var writeToDisk = fs.createWriteStream(path, {highWaterMark: 1024*1024});
req.pipe(writeToDisk);

免责声明:我不相信cargo cult服务器友好的块大小。我会使用默认值16kb,当性能出现问题时,测试其他大小,以找到当前设置的最佳值。

理想情况下,我希望服务器端磁盘的物理写入以1Mb的部分进行-为什么?我的心没有设定在确切的1Mb值上,但我要避免的是服务器上成千上万的微小写入。相反,我宁愿少写一些更大的字。我的一位同事提到1Mb将是一个很好的服务器友好型大小的文件。看,我确实读了详细说明文件的特定部分,但我不是这样解释的。仅仅因为如果缓冲区增长到该大小,write将返回false,这是否一定意味着在从可读流进行管道传输时,write默认为该大小?我的意思是,如果缓冲区增长到该大小,那么它将不再接受任何数据,直到数据被刷新到磁盘,而不一定只有达到该大小时才会刷新到磁盘…嗯,这可能是真的,但是为什么你不希望你的服务器在他有能力的时候刷新得更快呢?坦率地说,这是个好问题。我想我可能会继续前进,不太担心写得更多,然后再重新审视它是否成为一个问题。