Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.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
Node.js 与res.write相比,使用管道函数有什么优势_Node.js_Http_Express_Streaming - Fatal编程技术网

Node.js 与res.write相比,使用管道函数有什么优势

Node.js 与res.write相比,使用管道函数有什么优势,node.js,http,express,streaming,Node.js,Http,Express,Streaming,该框架是Express 当我从端点内发送请求并开始接收数据时,我可以分块读取数据并立即写入: responseHandler.on('data', (chunk) => { res.write(chunk); }); 或者我可以创建一个可写流,并通过管道将响应传递给该流 responseHandler.pipe(res) 很明显,管道函数考虑到了前一个过程,它有更多的维度。它们是什么?管理事件处理程序和使用readable.pipe(writable)之间最重要的区别在于使用管道:

该框架是Express

当我从端点内发送请求并开始接收数据时,我可以分块读取数据并立即写入:

responseHandler.on('data', (chunk) => {
  res.write(chunk);
});
或者我可以创建一个可写流,并通过管道将响应传递给该流

responseHandler.pipe(res)

很明显,管道函数考虑到了前一个过程,它有更多的维度。它们是什么?

管理事件处理程序和使用readable.pipe(writable)之间最重要的区别在于使用管道:

数据流将被自动管理,以便目标可写流不会被更快的可读流淹没

这意味着可读流可能比可写流快,并且管道处理该逻辑。如果您编写的代码如下:

responseHandler.on('data',(chunk)=>{
res.write(块);
});
res.write()函数

返回:(boolean)false,如果流希望调用代码在继续写入额外数据之前等待发出“drain”事件;否则是真的

这意味着可写流可能无法处理更多数据。所以您可以像writable.write()示例中提到的那样手动管理它

在某些情况下,您没有可读流,可以使用writable.write()写入可写流。 范例

const data=[];//一些数据的数组。
data.forEach((d)=>writable.write(d));
但是,您必须再次看到writeable.write返回的内容。如果为假,则必须手动调整流量

另一种方法是将数据包装成可读的流,然后通过管道传输

顺便说一下,使用管道还有一个很大的优点。您可以根据自己的需要将它们链接起来,例如:

readableStream
.pipe(modify)//转换流
.pipe(zip)//转换流
.管道(可写流);

通过总结所有内容尽可能利用node.js提供的管理流的功能。在大多数情况下,它将帮助您避免额外的复杂性,并且与手动管理相比,它不会变得更慢。

因此,我希望
res.send
res.end
函数能够适当地处理这个问题。您能告诉我您使用的是哪种库吗?这里的“res”是什么?