Node.js_node.js のストリームの概要
フローとは何ですか?
ストリームと言えば、*nix の概念が含まれます。 Pipe - *nix では、ストリームは (パイプ文字) を介してブリッジできるデータとしてシェルに実装されます。プロセス (stdout) は、次のプロセスの入力 (stdin) として直接使用できます。
Node では、ストリーム (Stream) の概念が似ており、データ ストリームのブリッジ機能を表します。
パイプ
ストリーミングの本質は .pipe() メソッドにあります。ブリッジ機能は、データ ストリームの両端 (アップストリーム/ダウンストリーム、または読み取り/書き込みストリーム) が .pipe() メソッドでブリッジされることです。
擬似コードの表現形式は次のとおりです:
//上流.pipe (下流)
Readable.pipe(Writable);
ストリームの分類
これは、Node v0.4 より前のいわゆる「クラシック」フローについて説明することを目的としたものではありません。次に、ストリームはいくつかのカテゴリ (すべて抽象インターフェイス:
) に分類されます。1.stream.Readable 読み取り可能なストリーム (_read メソッドを実装する必要があります。焦点はデータ ストリームの読み取りの詳細にあります
)
2.stream.Writable 書き込み可能なストリーム (_write メソッドを実装する必要があります。焦点はデータ ストリーム
の書き込みの詳細にあります)
3.stream.Duplex 読み取り/書き込みストリーム (上記の 2 つのインターフェイスを実装する必要があります。上記の 2 つのインターフェイスの詳細に注目してください
4.stream.Transform Duplex から継承 (_transform メソッドを実装する必要があります。焦点はデータ ブロックの処理です
簡単に言うと:
1) .pipe() の所有者は、一連の「readable」/「data」/「end」/「close」/「error」イベントを持つ読み取り可能なストリーム (ただし、これに限定されない) 機能を持っている必要があります。サブスクリプションは、
を呼び出すための .read()/.pause()/.resume() などの一連のメソッドも提供します。
2) .pipe() のパラメータには書き込み可能なストリーム機能が必要です (ただし、これに限定されません)。アクセス用の 'drain'/'pipe'/'unpipe'/'error'/'finish' イベントがあり、 も提供されます。
一体何だ
少しでも不安を感じていませんか?心配しないでください。人間の言語を話す低レベルのプログラマーとして、私は Stream を分解して、それについてお話します。
Node.js ソース コード 内の Stream クラスは次のように定義されています:
var EE = require('events').EventEmitter;
var util = require('util');
util.inherits(ストリーム、EE);
関数 Stream() {
EE.call(this);
}
ご覧のとおり、Stream は本質的に EventEmitter であり、イベント駆動型の関数 (.emit/.on...) があることを意味します。ご存知のとおり、「Node.js は V8 をベースとしたイベント駆動型プラットフォーム」であり、イベント駆動型のストリーミング プログラミングを実装し、Node と同じ非同期コールバック特性を備えています。
たとえば、読み取り可能ストリームには読み取り可能イベントがあり、一時停止された読み取り専用ストリームでは、データ ブロックを読み取る準備ができている限り、サブスクライバーに送信されます (読み取り可能ストリームとは何ですか)。 ? Express) req、ftp または複数フォームアップロードコンポーネントの req.part、システムの標準入力プロセス.stdin など)。読み取り可能なイベントを使用すると、シェル コマンドの出力を処理するパーサーなどのツールを作成できます:
process.stdin.on('読み取り可能', function(){
var buf = process.stdin.read();
if(buf){
var data = buf.toString();
// データを解析しています ... }
});
次のように呼び出します:
head -10 some.txt ノード parser.js
Readable ストリームの場合、古典的なソケットの例 のように、そのデータと終了イベントをサブスクライブしてデータのチャンクを取得し、ストリームが使い果たされたときに通知を受け取ることもできます。
ソケット.on('データ', 関数(チャンク) {
console.log(chunk.toString());
});
ソケット.on('end', function() {
proxy.close();
});
});
読み取り可能なストリームステータスの切り替え
Readable ストリームには、フロー モード (トレント) と一時停止モード (一時停止) の 2 つの状態があることに注意してください。前者はまったく停止できず、パイプされた相手にフィードを送り続けますが、後者はダウンストリームが明示的に Stream.read() リクエストを呼び出してデータ ブロックを読み取るまで一時停止します。 Readable ストリームは、初期化時に一時停止モードになります。
次のいずれかの動作が発生した場合、一時停止が流れに変わります:
1. データ イベント サブスクリプションを Readable ストリームに追加します
2. Readable で .resume() を呼び出して、フロー
を明示的に有効にします
3. Readable ストリームの .pipe(writable) を呼び出して、Writable ストリームにブリッジします
1.Readable ストリームはまだどのストリームにもパイプされていません。調整可能な .pause() を使用して一時停止できます
2. Readable ストリームはストリームにパイプされています。すべてのデータ イベント サブスクリプションを削除し、.unpipe() メソッドを呼び出して、ダウンストリーム ストリームとの関係を 1 つずつ解放する必要があります。
素晴らしい使い方
ストリームの非同期特性と組み合わせると、次のようなアプリケーションを作成できます。ユーザー A の出力をユーザー B のページの出力に直接ブリッジします。
var destination = req.headers['destination'] //送信先
; キャッシュ[宛先] = req;
//はい、返されないので、ajax リクエストを行うのが最善です
});
var user = req.headers['user'];
cache.find(user, function(err,previousReq){ //以前に保存した req を検索
var form = new multiparty.Form();
form.parse(previousReq) // 私用のファイルがあります
form.on('part', function (part) {
part.pipe(res) //ストリーミングメソッドは良いです:)
part.on('error', function (err) {
console.log(err);
messageging.setRequestDone(uniqueID);
return res.end(err);
});
});
});
});
参考
ストリームを使用したノード プログラムの作成方法: ストリーム ハンドブック
ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。

ストリーム操作は Java8 のハイライトです。 java.util.stream は非常に強力ですが、実際の作業ではほとんど使用していない開発者がまだ多くいます。最も不満の理由の 1 つは、デバッグが難しいということです。実際、最初の頃はそうでした。 as stream は DEBUG では使用できません 1 行のコードだと、実際には次のステップになると多くの操作が一度に渡されるため、どの行に問題があるのか判断するのが困難です。プラグイン: JavaStreamDebugger 使用している IDEA バージョンが比較的新しい場合、このプラグインはすでに含まれているため、インストールする必要はありません。まだインストールされていない場合は、手動でインストールしてから以下に進みます。

当初、JS はブラウザ側でのみ動作していたため、Unicode でエンコードされた文字列の処理は簡単でしたが、バイナリ文字列や非 Unicode エンコード文字列の処理は困難でした。バイナリは、コンピュータのビデオ/オーディオ/プログラム/ネットワーク パッケージの最低レベルのデータ形式です。

フロントエンド アプリケーション開発に Node.js を使用するにはどうすればよいですか?次の記事では、Node でフロントエンド アプリケーションを開発する方法 (プレゼンテーション層アプリケーションの開発を含む) を紹介します。今日私が共有したソリューションは単純なシナリオ向けであり、フロントエンド開発者がコーディング経験がなくても、Node.js に関する背景知識や専門知識を習得することなく、いくつかの単純なサーバーサイド開発タスクを完了できるようにすることを目的としています。
