2013-07-30 38 views
11

Tôi muốn biết liệu có thể nhiều chức năng có thể tiêu thụ một luồng trong node.js. Nếu có Làm thế nào điều này có thể thực hiện? Có thể đi đến nhiều điểm đến không?Mức tiêu thụ nhiều luồng đơn

Tôi muốn sử dụng luồng ở hai hàm khác nhau song song. Tôi đang làm dòng chảy song song bằng cách sử dụng mô-đun async. Vì vậy, nó sẽ có thể nói vấn đề ống() bên trong mỗi chức năng này?

Xin cảm ơn trước.

+0

Hãy để người xử lý đầu tiên sử dụng nó là luồng, sau đó chuyển nó qua bộ xử lý thứ hai. –

+0

@BenjaminGruenbaum hoặc thiết kế "tee" duy trì nhiều luồng đầu ra và chỉ ghi dữ liệu từ luồng đầu vào vào mỗi đầu ra. – SheetJS

+1

Đợi đã, nvm. Bạn có thể tạo luồng cho nhiều địa điểm bạn muốn - nó rất đơn giản. –

Trả lời

12

, có thể, dễ dàng và phổ biến. Sau đây là luồng dữ liệu đường ống từ một nguồn duy nhất đến nhiều nguồn. Nó cho bạn thấy một hàm callback vô danh mà được đặt trên vòng lặp sự kiện có chứa các dòng ghi chức năng mà làm công việc ghi thực tế:

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

Một cách dễ dàng hơn là sử dụng .pipe() chức năng.

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

Các .pipe() cho phép bạn làm những điều tiện lợi như chaining đường ống dẫn trong tương lai cho các thao tác đường ống, rất giống với khái niệm unix của một cái gì đó giống như du . | sort -rn | less nơi bạn có thể sử dụng nhiều đường ống để xử lý.

+0

Tôi đang sử dụng luồng trong hai chức năng khác nhau trong luồng song song trong mô-đun không đồng bộ. Vì vậy, nếu tôi đã làm các đường ống trong hai chức năng khác nhau nó vẫn sẽ làm việc? –

+0

Tôi đã cập nhật câu hỏi với các chi tiết mà tôi đã viết trong nhận xét. Vì vậy, vui lòng cập nhật câu trả lời của bạn –

Các vấn đề liên quan