序文2 つの Node.js プロセスはどのように相互に通信するのでしょうか?ここでは 2 つのシナリオがあります。
最初のシナリオでは、通常、通信に TCP または HTTP が使用されますが、2 番目のシナリオには 2 つのサブシナリオがあります。
前者は組み込みの IPC 通信チャネルを使用でき、後者はカスタム パイプラインを使用できます。カスタム パイプラインについては、以下で詳しく説明します。 異なるコンピュータ上の 2 つの Node.js プロセス間の通信通信するためには、まずネットワーク内のプロセスを識別する方法を理解する必要があります。ネットワーク層の IP アドレスはネットワーク内のホストを一意に識別でき、トランスポート層のプロトコルとポートはホスト内のアプリケーション (プロセス) を一意に識別できます。このように、ネットワークのプロセスは、3 つの要素 (IP アドレス、プロトコル、ポート) を使用して識別できます。 TCPソケットの使用TCP ソケットは、TCP/IP プロトコルに基づく通信方法であり、ネットワークを介して接続されたコンピューター上のプロセス間の通信を可能にします。 1 つはサーバーとして使用され、もう 1 つはクライアントとして使用されます。server.js コードは次のとおりです。 定数net = require('net') const server = net.createServer(socket => { console.log('ソケットが接続されました') socket.on('close', () => console.log('ソケットが切断されました')) socket.on('error', err => console.error(err.message)) socket.on('data', データ => { console.log(`受信: ${data}`) socket.write(データ) console.log(`送信: ${data}`) }) }) サーバー.listen(8888) client.js コード: 定数net = require('net') const クライアント = net.connect(8888, '192.168.10.105') client.on('connect', () => console.log('接続されました。')) client.on('data', data => console.log(`receive: ${data}`)) client.on('end', () => console.log('切断されました。')) client.on('error', err => console.error(err.message)) 間隔を設定する(() => { 定数メッセージ = 'hello' console.log(`送信: ${msg}`) クライアント.書き込み(メッセージ) }, 3000) 操作効果: $ ノードサーバー.js クライアントが接続されました 受信: こんにちは 送信: こんにちは $ ノードクライアント.js サーバーに接続する 送信: こんにちは 受信: こんにちは HTTPプロトコルの使用HTTP プロトコルも TCP に基づいているため、通信の観点から見ると、この方法は本質的に違いはなく、上位層プロトコルをカプセル化するだけです。 server.js コードは次のとおりです。 定数 http = require('http') http.createServer((req, res) => res.end(req.url)).listen(8888) client.js コード: 定数 http = require('http') 定数オプション = { ホスト名: '192.168.10.105', ポート: 8888、 パス: '/hello', メソッド: 'GET'、 } const req = http.request(オプション、res => { console.log(`ステータスコード: ${res.statusCode}`) res.on('データ', d => process.stdout.write(d)) }) req.on('error', error => console.error(error)) 要求終了() 操作効果: $ ノードサーバー.js url /こんにちは $ ノードクライアント.js ステータスコード: 200 こんにちは 同じコンピュータ上の 2 つの Node.js プロセス間の通信ネットワークソケットは、同一ホスト上のプロセス間通信(ループバックアドレス127.0.0.1経由)にも使用できますが、この方法では、ネットワークプロトコルスタック、パッケージ化とアンパック、チェックサムの計算、シーケンス番号と応答の維持など、ネットワーク通信用に設計された処理が必要です。同一コンピュータ上の2つのプロセスは、より効率的な通信方法、つまりIPC(プロセス間通信)を使用できます。Unixでの具体的な実装方法は、Unixドメインソケットです。これは、ローカルで開かれたソケットファイルを介してサーバーとクライアント間で通信する方法です。TCP通信とは異なり、通信中にローカルファイルを指定するため、ドメイン解決や外部通信は行われないため、TCPよりも高速で、同一ホスト上の伝送速度はTCPの2倍です。 組み込みIPCチャネルの使用作成した子プロセスと通信したい場合は、非常に便利です。child_process モジュールの fork メソッドには独自の通信メカニズムがあるため、基礎となる詳細に注意を払う必要はありません。たとえば、親プロセスの parent.js コードは次のようになります。 定数 fork = require("child_process").fork const パス = require("パス") const child = fork(path.resolve("child.js"), [], { stdio: "inherit" }); child.on("メッセージ", (メッセージ) => { console.log("子からのメッセージ:", メッセージ) 子.送信("こんにちは") }) 子プロセス child.js コード: process.on("メッセージ", (メッセージ) => { console.log("親からのメッセージ:", message); }) if (process.send) { setInterval(() => process.send("hello"), 3000) } 操作効果は以下のとおりです。 $ ノードの親.js 子供からのメッセージ: こんにちは 親からのメッセージ: こんにちは 子供からのメッセージ: こんにちは 親からのメッセージ: こんにちは カスタムパイプラインの使用独立した Node.js プロセスが 2 つある場合、通信チャネルを確立するにはどうすればよいですか? Windows では、名前付きパイプ (Named PIPE) を使用できます。また、Unix では、Unix ドメイン ソケットを使用できます。1 つはサーバーとして、もう 1 つはクライアントとして使用できます。server.js コードは次のとおりです。 定数net = require('net') 定数 fs = require('fs') const pipeFile = process.platform === 'win32' ? '\\\\.\\pipe\\mypip' : '/tmp/unix.sock' const server = net.createServer(接続 => { console.log('ソケットが接続されました。') connection.on('close', () => console.log('切断されました。')) 接続.on('データ', データ => { console.log(`受信: ${data}`) 接続.書き込み(データ) console.log(`送信: ${data}`) }) connection.on('error', err => console.error(err.message)) }) 試す { fs.unlinkSync(パイプファイル) } キャッチ (エラー) {} server.listen(パイプファイル) client.js コードは次のとおりです。 定数net = require('net') const pipeFile = process.platform === 'win32' ? '\\\\.\\pipe\\mypip' : '/tmp/unix.sock' const クライアント = net.connect(パイプファイル) client.on('connect', () => console.log('接続されました。')) client.on('data', data => console.log(`receive: ${data}`)) client.on('end', () => console.log('切断されました。')) client.on('error', err => console.error(err.message)) 間隔を設定する(() => { 定数メッセージ = 'hello' console.log(`送信: ${msg}`) クライアント.書き込み(メッセージ) }, 3000) 操作効果: $ ノードサーバー.js ソケットが接続されました。 受信: こんにちは 送信: こんにちは $ ノードクライアント.js 接続されました。 送信: こんにちは 受信: こんにちは 要約する2 つの Node.js プロセスが通信する方法についての記事はこれで終わりです。2 つの Node.js プロセスが通信する方法についての詳細は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Dockerコンテナでユーザーを切り替えるときに権限が不足する問題を解決する方法
>>: HTML テキスト ボックスの入力を数字と小数点のみに制限する
JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...
まず、MySQL公式サイトからインストールパッケージをダウンロードします。MySQLはオープンソース...
目次序文1.v-ショー2.v-if 3. v-showとv-ifの違い1. 原則の違い2. アプリケ...
type はブラウザでの入力と出力に使用されるコントロールです (たとえば、type="t...
2011 年に最も顕著なウェブサイトの変更は、一連の製品に新しいユーザー インターフェースを導入した...
目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...
ここでは、Linux プラットフォームでの Zabbix エージェントのインストールと構成について簡...
この記事では、ドメイン名の書き換えとワイルドカードドメイン名の解決を行うための Nginx の設定方...
目次1. vuexとは何か2. インストールと導入3. vuexの使用4. プロセスの紹介5. 突然...
Zabbix 導入ドキュメントzabbix導入後zabbixエージェントの操作1. MySQLを監視...
1. 先頭のあいまいクエリではインデックスを使用できません (「%XX」や「%XX%」など)コード値...
1. jdkダウンロードアドレスをダウンロードする我下載的是jdk-8u221-linux-x64....
このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...
次のように、Windows/MacOS からログインした Linux の SSH ターミナルで簡単に...
目次dnsmasq をインストールして設定するChinaDNS をインストールして設定するshado...