ノードの重複ストリームの作成js
13331 ワード
執筆Victor Jonah ✏️
二重ストリームは、ノードのストリームの基本的なカテゴリです.jsしかし、それらはしばしば二相ストリームを含む誤解されます.
この種のストリームはハイブリッドである
この記事では、二重ストリームを確認し、どのように1つを作成します.しかし、その前に、ストリームが何であるかについて我々自身をリフレッシュしましょう.
このポストのために、JavaScriptとノードの知識.JSは助けることができるが、それは必要ではない.
ストリームは、ソースから収集され、シーケンス内の別の場所にもたらしたデータです.ビデオのオンラインストリーミングは例です:ビデオコンテンツがシーケンスにあなたに渡される間、完全なコンテンツはまだ利用できません.
ストリームは4つのカテゴリーに分けられます.書き込み可能で、読みやすく、複式で、変換します.
読み込み可能なストリームは、ファイルまたはソースからデータを読み取り、メインアプリケーションに渡します.A buffer then stores the data アプリケーションにデータを渡す遅延が発生した場合.
書き込み可能なストリームの場合、機能は逆です.データをアプリケーションからファイルに読み込みます.また、データ転送が遅くなるとバッファもあり、そこに格納します.
一方、二相ストリームは、両方のストリームが互いに独立している読み書き可能なストリームの混合物である.
変換ストリームはまた、Duplexのようですが、読み取り可能で書き込み可能なストリームの両方が接続されます.
接続は、アプリケーションにデータを書き込むことができますが、データを読み取り可能なストリームに渡す前に操作する必要があります.
我々が以前に説明したように、Duplex Streamは基本的に読みやすくて書き込み可能なストリームの混合物です.
二相ストリームの例はSocket , これは、データを送受信するために2つのチャンネルを提供します.
重複ストリームの他の例は以下の通りです: TCP sockets
zlib streams
crypto streams
ノードのデュプレックスストリームを作成するには.jsモジュールから必要なメソッドをインポートします.
したがって、このトンネルで、データ処理を書き込み可能なストリームにチェックすることができます.
次に、読み込み可能なストリームを使用してファイルを読み、それを書き込み可能なストリームに書き込もう
The
我々も修正しました
このようにして、端末の応答は500ミリ秒単位で増加します.
Duplexストリームをノードで作業することで.JS、我々はどのように我々は1つのストリームから別のデータを渡すの遅延を見ることができました.
Duplex Streamは我々のデジタル世界で非常に重要です、そして、特にソケットで、我々を知らずにほとんどの時間使用されます.これらは、読み書き可能なストリームの両方を実装する方法のため、強力な機能です.
ノードベースのWebアプリケーションやウェブサイトの展開は簡単です.あなたのノードのインスタンスがあなたのアプリケーションにリソースを提供し続けていることを確認することは物事がより厳しい取得です.あなたがバックエンドまたはサードパーティサービスへの要求を確実にすることに興味があるならば、成功してください.try LogRocket .
LogRocket ウェブアプリのDVRのように、あなたのサイトで起こる文字通りのすべてを記録してください.問題が起こる理由を推測する代わりに、あなたは根本的な原因を理解するために問題のネットワーク要求に関して集計して、報告することができます.
ページのロード時間などのベースラインのパフォーマンスのタイミング、最初のバイト、低速ネットワークのリクエストにログを記録するためにあなたのアプリケーションをログ出力器、およびまた、RUDX、NGRX、およびVUEXのアクション/状態を記録します.Start monitoring for free .
二重ストリームは、ノードのストリームの基本的なカテゴリです.jsしかし、それらはしばしば二相ストリームを含む誤解されます.
この種のストリームはハイブリッドである
read
and write
メソッドの実装中.この記事では、二重ストリームを確認し、どのように1つを作成します.しかし、その前に、ストリームが何であるかについて我々自身をリフレッシュしましょう.
このポストのために、JavaScriptとノードの知識.JSは助けることができるが、それは必要ではない.
ストリームとは
ストリームは、ソースから収集され、シーケンス内の別の場所にもたらしたデータです.ビデオのオンラインストリーミングは例です:ビデオコンテンツがシーケンスにあなたに渡される間、完全なコンテンツはまだ利用できません.
ストリームは4つのカテゴリーに分けられます.書き込み可能で、読みやすく、複式で、変換します.
読み込み可能なストリームは、ファイルまたはソースからデータを読み取り、メインアプリケーションに渡します.A buffer then stores the data アプリケーションにデータを渡す遅延が発生した場合.
書き込み可能なストリームの場合、機能は逆です.データをアプリケーションからファイルに読み込みます.また、データ転送が遅くなるとバッファもあり、そこに格納します.
一方、二相ストリームは、両方のストリームが互いに独立している読み書き可能なストリームの混合物である.
変換ストリームはまた、Duplexのようですが、読み取り可能で書き込み可能なストリームの両方が接続されます.
接続は、アプリケーションにデータを書き込むことができますが、データを読み取り可能なストリームに渡す前に操作する必要があります.
二重ストリーム例
我々が以前に説明したように、Duplex Streamは基本的に読みやすくて書き込み可能なストリームの混合物です.
二相ストリームの例はSocket , これは、データを送受信するために2つのチャンネルを提供します.
重複ストリームの他の例は以下の通りです:
チャンクデータを遅延するためのカスタムDuplexストリームの作成
ノードのデュプレックスストリームを作成するには.jsモジュールから必要なメソッドをインポートします.
const { PassThrough } = require('stream')
const tunnel = new PassThrough()
The PassThrough
ストリームは、読みやすいストリームを書き込み可能なストリームにパイプするためのトンネルとして機能するデュプレックスストリームの基本的なタイプです.したがって、このトンネルで、データ処理を書き込み可能なストリームにチェックすることができます.
次に、読み込み可能なストリームを使用してファイルを読み、それを書き込み可能なストリームに書き込もう
writeStream
現在const { PassThrough } = require("stream");
const { createReadStream, createWriteStream } = require("fs");
const readStream = createReadStream("./README.md"); // read data from this file
const writeStream = createWriteStream("./copy.txt"); // write data to this file
次に、データがトンネル内を通過しているかどうかを確認するために、バッファにあるものを確認できます.const { PassThrough } = require("stream");
const { createReadStream, createWriteStream } = require("fs");
const readStream = createReadStream("./README.md");
const writeStream = createWriteStream("./copy.txt");
const tunnel = new PassThrough();
tunnel.on("data", (chunk) => {
console.log("bytes:", chunk); // bytes: <Buffer 23 20 4a 61 76 61 53 63 72 69 70 74 20 41 6c 67 6f 72 69 74 68 6d 73 20 61 6e 64 20 44 61 74 61 20 53 74 72 75 63 74 75 72 65 73 0a 0a 54 68 69 73 20 ... 1767 more bytes>
});
readStream.pipe(tunnel).pipe(writeStream);
その他PassThrough
, 我々はThrottle
つのソースから他のソースへのデータの転送方法を遅延させる.Duplexストリームを使用して、データをアプリケーションに取り込むときの遅延を設定できます.const { PassThrough, Duplex } = require("stream");
const { createReadStream, createWriteStream } = require("fs");
const readStream = createReadStream("./movie.mp4");
const writeStream = createWriteStream("./copy.mp4");
class Throttle extends Duplex {
/*
* Class constructor will receive the injections as parameters.
*/
constructor(time) {
super();
this.delay = time;
}
_read() {}
// Writes the data, push and set the delay/timeout
_write(chunk, encoding, callback) {
this.push(chunk);
setTimeout(callback, this.delay);
}
// When all the data is done passing, it stops.
_final() {
this.push(null);
}
}
const tunnel = new PassThrough();
const throttle = new Throttle(500);
let amount = 0;
tunnel.on("data", (chunk) => {
amount += chunk.length;
console.log("bytes:", amount);
});
readStream.pipe(throttle).pipe(tunnel).pipe(writeStream);
上のこのコードで、我々は作成する二相ストリームをつくりましたthrottle(delay)
我々のパイプライン化されたデータのために.これは500ミリ秒の遅延を設定し、Throttle
クラスはチャンクを押します.The
_final()
メソッドはデータ転送が完了するとNULLを押すだけです.我々も修正しました
PassThrough
ストリームを読むすべてのチャンクの長さを追加します.このようにして、端末の応答は500ミリ秒単位で増加します.
結論
Duplexストリームをノードで作業することで.JS、我々はどのように我々は1つのストリームから別のデータを渡すの遅延を見ることができました.
Duplex Streamは我々のデジタル世界で非常に重要です、そして、特にソケットで、我々を知らずにほとんどの時間使用されます.これらは、読み書き可能なストリームの両方を実装する方法のため、強力な機能です.
200年代のみ✔️ モニタに失敗し、ネットワーク要求を遅くする
ノードベースのWebアプリケーションやウェブサイトの展開は簡単です.あなたのノードのインスタンスがあなたのアプリケーションにリソースを提供し続けていることを確認することは物事がより厳しい取得です.あなたがバックエンドまたはサードパーティサービスへの要求を確実にすることに興味があるならば、成功してください.try LogRocket .
LogRocket ウェブアプリのDVRのように、あなたのサイトで起こる文字通りのすべてを記録してください.問題が起こる理由を推測する代わりに、あなたは根本的な原因を理解するために問題のネットワーク要求に関して集計して、報告することができます.
ページのロード時間などのベースラインのパフォーマンスのタイミング、最初のバイト、低速ネットワークのリクエストにログを記録するためにあなたのアプリケーションをログ出力器、およびまた、RUDX、NGRX、およびVUEXのアクション/状態を記録します.Start monitoring for free .
Reference
この問題について(ノードの重複ストリームの作成js), 我々は、より多くの情報をここで見つけました https://dev.to/logrocket/creating-duplex-streams-in-node-js-4nmbテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol