2013-07-30 20 views
11

複数の関数がnode.jsの単一ストリームを消費する可能性があるかどうかを知りたい。はいの場合これはどのようにすることができますか?複数の宛先にパイプすることは可能ですか?単一ストリームの複数の消費

ストリームを2つの異なる機能で並列に使用したいと考えています。私は非同期モジュールを使用して並列フローを実行しています。それでは、これらの関数のそれぞれの内部にpipe()ステートメントを発行することは可能でしょうか?

ありがとうございます。

+0

最初のハンドラを消費してストリーム自体にしてから、それを2番目のハンドラに渡します。 –

+0

@BenjaminGruenbaumまたは複数の出力ストリームを維持し、入力ストリームから各出力にデータを書き込むだけの "tee"を設計します。 – SheetJS

+1

待ち、nvm。あなたが望む場所にストリームをパイプすることができます - それは死んでシンプルです。 –

答えて

12

はいは、可能で簡単で一般的です。以下は、単一のソースから複数のソースへのパイプされたデータストリームです。

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()機能を使用することです:それはあなたの実際の書き込み作業を行う書き込み機能ストリームが含まれているイベントループに配置します1つの匿名コールバック関数を示しています。

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()あなたはハンドラに複数のパイプを使用することができますdu . | sort -rn | lessのようなもののUnixの概念に非常に似て、パイプライン操作のために、将来的にパイプラインチェーンのような気の利いたことを行うことができます。

+0

私は非同期モジュールの並列フローで2つの異なる機能でストリームを使用しています。パイプを2つの異なる機能で実行しても、それでも機能しますか? –

+0

私はコメントに書き込んだ詳細で質問を更新しました。だからあなたの答えも更新してください –

関連する問題