Node.js は、イベント駆動型のノンブロッキング I/O モデルに基づく JavaScript 実行環境で、高性能ネットワーク サーバーの構築によく使用されます。 Node.js では、パイプ メソッドを使用してデータ フローを処理できます。この記事では、Node.js のパイプに関する関連知識を紹介します。
Node.js では、パイプは読み取り可能なストリームから書き込み可能なストリームにデータを転送できる非常に重要なメソッドです。これは、読み取り可能なストリームから書き込み可能なストリームにデータを自動的に送信できるストリーム コネクタであり、データ送信の複雑さを簡素化します。
pipe メソッドの構文は次のとおりです。
readable.pipe(destination[, options])
このうち、readable は読み取り可能なストリーム (ファイルなど)ストリーム、ネットワーク ストリームなど)、宛先は書き込み可能なストリーム (ファイル ストリーム、ネットワーク ストリームなど)、オプションは次の属性を含むオプション オブジェクトです:
パイプ メソッドの基本的な実装は、読み取り可能なストリームと書き込み可能なストリームのイベントを監視することによって実現されます。読み取り可能ストリームがデータ イベントを発行すると、パイプ メソッドは、読み取り可能ストリームが終了するまで (end メソッドを呼び出して) データを書き込み可能ストリームに自動的に転送します。
次は、パイプ メソッドを使用して、あるファイル ストリームから別のファイル ストリームにデータを転送する簡単な例です。
const fs = require('fs'); const readStream = fs.createReadStream('input.txt'); const writeStream = fs.createWriteStream('output.txt'); readStream.pipe(writeStream);
もちろん、パイプ メソッドをチェーンで呼び出すこともできます。現在 3 つのファイルがあるとします。最初のファイルのデータを 2 番目のファイルに書き込み、次に 2 番目のファイルのデータを 3 番目のファイルに書き込みたいとします。コードの実装は次のとおりです:
const fs = require('fs'); const readStream1 = fs.createReadStream('input1.txt'); const readStream2 = fs.createReadStream('input2.txt'); const writeStream1 = fs.createWriteStream('output1.txt'); const writeStream2 = fs.createWriteStream('output2.txt'); readStream1.pipe(writeStream1).pipe(writeStream2); readStream2.pipe(writeStream2);
上記のコードでは、readStream1 のデータは最初に writeStream1 に転送され、次に writeStream1 のパイプを介して writeStream2 に転送されますが、readStream2 のデータは直接 writeStream2 に転送されます。つまり、writeStream2 は 2 つのファイルのデータを保存します。
パイプメソッドを使用してデータを送信する場合、読み取り可能なストリームと書き込み可能なストリームのデータ形式が同じである必要があり、一致しない場合はエラーが報告されます。たとえば、データ形式が異なるため、ファイル ストリームからデータベース接続にデータを転送できません。
手動データ処理と比較して、パイプ方式の使用には次の利点があります。
さらに、パイプ メソッドには特定のフォールト トレランス メカニズムもあります。書き込み可能なストリームがデータを受信できない場合、パイプ メソッドはデータをキャッシュし、書き込み可能なストリームが受信可能になるのを待ってからデータを送信します。
Node.js では、パイプは読み取り可能なストリームから書き込み可能なストリームにデータを転送できる非常に重要なメソッドです。パイプ メソッドを使用すると、データ転送の複雑さを簡素化し、データ損失やメモリ リークを回避でき、特定のフォールト トレランス メカニズムが備わっており、Node.js でデータ ストリームを処理する重要な方法です。
以上がNode.js のパイプ関連の知識について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。