2013-07-30 3 views
11

Я хочу знать, возможно ли, что несколько функций могут потреблять один поток в node.js. Если да, как это сделать? Можно ли подключаться к нескольким пунктам назначения?Множественное потребление одного потока

Я хочу использовать поток в двух различных функциях, которые являются параллельными. Я выполняю параллельный поток, используя асинхронный модуль. Так можно ли выпустить инструкцию pipe() внутри каждой из этих функций?

Заранее спасибо.

+0

Имейте первого обработчика, потребляющего его как поток, а затем передайте его второму обработчику. –

+0

@BenjaminGruenbaum или создать «тройник», который поддерживает несколько выходных потоков и просто записывает данные из входного потока на каждый вывод. – 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() функции.

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, где вы можете использовать несколько труб для обработчиков.

+0

Я использую поток в двух различных функциях в параллельном потоке в асинхронном модуле. Итак, если бы я сделал трубку в двух разных функциях, она все равно работала бы? –

+0

Я обновил вопрос с подробностями, которые я написал в комментарии. Поэтому, пожалуйста, обновите свой ответ тоже –

Смежные вопросы