gpt4 book ai didi

node.js - 使用管道函数比 res.write 有什么优势

转载 作者:可可西里 更新时间:2023-11-01 17:17:25 24 4
gpt4 key购买 nike

框架是 Express。

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

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

或者我可以创建一个可写流并将响应通过管道传递给它。

responseHandler.pipe(res)

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

最佳答案

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

The flow of data will be automatically managed so that the destination Writable stream is not overwhelmed by a faster Readable stream. Pipe

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

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

res.write() 函数

Returns: (boolean) false if the stream wishes for the calling code to wait for the 'drain' event to be emitted before continuing to write additional data; otherwise true. Link

这意味着可写流可能还没有准备好处理更多的数据。因此,您可以按照 writable.write() 示例中所述手动管理它。

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

    const data = []; // array of some data.
data.forEach((d) => writable.write(d));

但同样,您必须查看 writable.write 返回的内容。如果它为 false,您必须以手动方式操作以调整流。

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

顺便说一句,使用管道还有一个很大的好处。您可以根据需要链接它们,例如:

    readableStream
.pipe(modify) // transform stream
.pipe(zip) // transform stream
.pipe(writableStream);

通过总结 node.js 的所有功能,如果可能的话,可以管理流。在大多数情况下,它会帮助您避免额外的复杂性,并且与手动管理相比,它不会变慢。

关于node.js - 使用管道函数比 res.write 有什么优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54899916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com