问题 单流的多次消耗


我想知道多个函数是否可以使用node.js中的单个流。如果是,这怎么办?是否可以管道到多个目的地?

我想在两个不同的并行函数中使用流。我正在使用异步模块进行并行流程。那么可以说在每个函数中发出pipe()语句吗?

提前致谢。


1328
2017-07-30 21:15


起源

让第一个使用它的处理程序是一个流本身,然后将它传递给第二个处理程序。 - Benjamin Gruenbaum
@BenjaminGruenbaum或设计一个“tee”,它维护多个输出流,只是将数据从输入流写入每个输出。 - SheetJS
等等,nvm。你可以将流输送到你想要的任意数量的地方 - 这很简单。 - Benjamin Gruenbaum
你确定我能把它管道到我想要的那么多的流吗? - Saransh Mohapatra


答案:


,这是可能的,简单的和常见的。以下是从单个源到多个源的管道数据流。它向您展示了一个匿名回调函数,该函数放置在包含执行实际写入工作的写入函数流的事件循环中:

var fs  = require('fs');

var rs1 = fs.createReadStream ('input1.txt');                      
var ws1 = fs.createWriteStream('output1.txt');     
var ws2 = fs.createWriteStream('output2.txt');

rs1.on('data', function (data) {                                  
  console.log(data.toString('utf8'));                              
  ws1.write('1: ' + data);                                       
  ws2.write('2: ' + data);                                       
});

一种更简单的方法是使用 .pipe() 功能。

var fs  = require('fs');

var rs1 = fs.createReadStream ('input1.txt');                      
var ws1 = fs.createWriteStream('output1.txt');     
var ws2 = fs.createWriteStream('output2.txt');

rs1.pipe(ws1);
rs1.pipe(ws2);

.pipe() 允许你做管道操作的管道链接等漂亮的东西,非常类似于unix概念之类的东西 du . | sort -rn | less 您可以在哪里使用多个管道来处理。


12
2017-07-31 18:54



我在异步模块中并行流中使用两个不同功能的流。所以,如果我用两个不同的功能管道,它仍然可以工作? - Saransh Mohapatra
我已经用评论中写的详细信息更新了问题。所以请更新你的答案 - Saransh Mohapatra