2013-07-30 5 views
11

Ich möchte wissen, ob es möglich ist, dass mehrere Funktionen einzelnen Strom in node.js verbrauchen können. Wenn ja Wie kann das gemacht werden? Ist es möglich, mehrere Ziele zu verbinden?Mehrfacher Verbrauch des einzelnen Stromes

Ich möchte den Stream in zwei verschiedenen Funktionen verwenden, die parallel sind. Ich mache den parallelen Fluss mit dem Async-Modul. Wird es also möglich sein, die Anweisung pipe() in jeder dieser Funktionen auszugeben?

Vielen Dank im Voraus.

+0

Lassen Sie den ersten Handler, der es verbraucht, selbst ein Stream sein und geben Sie ihn dann an den zweiten Handler weiter. –

+0

@BenjaminGruenbaum oder entwerfen Sie ein "T-Stück", das mehrere Ausgabeströme verwaltet und nur Daten aus dem Eingabestrom an jeden Ausgang schreibt. – SheetJS

+1

Warte, nvm. Du kannst Streams an so viele Orte leiten, wie du willst - es ist tot einfach. –

Antwort

12

Ja, es ist möglich, einfach und üblich. Das Folgende ist ein verrohrter Datenstrom von einer einzelnen Quelle zu mehreren Quellen. Es zeigt Ihnen die eine anonyme Callback-Funktion, die auf dem Ereignisschleife platziert wird, die die Schreibfunktion Ströme enthält, die die eigentliche Schreibarbeit tun:

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);          
}); 

Eine einfachere Möglichkeit ist es, die .pipe() Funktionen zu nutzen.

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); 

Die .pipe() können Sie raffinierte Dinge wie Pipeline-Chaining in Zukunft für Pipeline-Manipulation, sehr ähnlich dem Unix-Konzept von so etwas wie du . | sort -rn | less tun, wo Sie mehrere Rohre Handler verwenden können.

+0

Ich verwende Strom in zwei verschiedenen Funktionen im Parallelfluss im Async-Modul. Also, wenn ich die Pipe in zwei verschiedenen Funktionen hätte, würde es immer noch funktionieren? –

+0

Ich habe die Frage mit den Details aktualisiert, die ich in den Kommentar geschrieben habe. Also bitte aktualisieren Sie Ihre Antwort auch –