この記事は主に、nodejs のストリームとパイプの仕組みを理解するための原理と実装を紹介します。興味のある方は参考にしてください。
前書き
数日前、ある人が私にパイプの問題について質問しました。私は長い間、nodejs を使用してきましたが、毎回あまり使用しないため、ストリームの使用を避けていたことがわかり、今、再学習しています。関連する知識を整理します。
nodeschoolを通してストリームを学びましょう
nodeschoolにはストリームの使用法を教えるためのストリームアドベンチャーチュートリアルがあり、とても簡単です
パイプへの単純なストリーム
まず第一に、入力を出力に配置できますパイプラインを介した入力と出力は、コンソール、ファイル ストリーム、または
process.stdin.pipe(process.stdout) process.stdin.pipe(fs.createWriteStream(path)) fs.createReadStream(path).pipe(process.stdin)
パイプの途中で処理
などの http リクエストにすることができます。パイプラインの途中で処理したい場合は、例えば、入力文字列を大文字に変更して出力に書き込みたい場合、through2などの中間処理として利用できるフレームワークを利用するととても便利です
var through2 = require('through2'); var stream = through2(write,end) process.stdin .pipe(stream) .pipe(process.stdout); function write(line,_,next){ this.push(line.toString().toUpperCase()) next(); }) function end(done){ done(); })
streamは変換されます通常のコールバックに変換します
入力がストリームで出力が通常の関数の場合、入力ストリームを通常の関数バッファーに変換する必要があります。この時点で concat-stream ライブラリを試すことができます
var concat = require('concat-stream'); var reverseStream=concat(function(text){ console.log(text.toString().split("").reverse().join("")); }) process.stdin.pipe(reverseStream)
http サーバーのストリーム
は stdin や fs と似ており、その特性上、http もストリームの使用に適しており、同様の機能を備えています
var http = require('http'); var server = http.createServer(function(req,res){ req.pipe(res); })
両方の入力として機能するストリーム。リクエスト フレームワークは次の関数を実装し、ストリームをリクエスト リクエストにパイプし、ストリームのコンテンツをサーバーに送信し、他のコードで使用できるようにストリームとして返します。実装は次のとおりです。
var request = require('request'); var r = request.post('http://localhost:8099'); process.stdin.pipe(r).pipe(process.stdout)
分岐パイプライン
この例は、入力パイプライン内のloudクラスを含むhtml要素を大文字操作のために別のパイプラインに配置し、最後にそれらを出力にマージします
。var trumpet = require('trumpet'); var through2 = require('through2'); var fs = require('fs'); var tr = trumpet(); var stream = tr.select('.loud').createStream(); var upper = through2(function(buf,_,next){ this.push(buf.toString().toUpperCase()); next(); }) stream.pipe(upper).pipe(stream); process.stdin.pipe(tr).pipe(process.stdout);
入力ストリームと出力ストリームをマージする例
次の例では、サブプロセスを呼び出すためのストリームの使用を実装しています
上の例では、ストリームをマージする方法やその他のより複雑なアプリケーション方法を知ることができます。つまり、全体として次のような特徴に準拠しています:
Streamはreadableとwritebleに分かれています
Streamはパイプメソッド以上がNodejs のストリームとパイプについての深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。