Linux、Mac、Windows を完全にサポートする、ローカルおよびリモートのプロセス間通信用の Nodejs モジュール。また、低レベルの UNIX および Windows ソケットから UDP、セキュア TLS および TCP ソケットまで、あらゆる形式のソケット通信もサポートします。
Node.JS の複雑なマルチプロセスニューラル ネットワーキングのための優れたソリューション
npm install node-ipc
npm install node-ipc@^9.0.0
//es6
import ipc from 'node-ipc'
//commonjs
const ipc = require ( 'node-ipc' ) . default ;
npm info : node-ipc の npm の傾向と統計を参照します。
GitHub 情報:
コードカバレッジ情報:
npm run coverage
実行して、localhost:8080 でカバレッジ レポートのローカル バージョンをホストします。これはイスタンブールやニューヨークと同じ形式です。それは非常によく知られているはずです。
vanilla-test を使用したテストvanilla-test
コードをトランスパイルすることなく、ネイティブ ESM をカバーできるように c8 と統合します。この記事の執筆時点では、これが ESM をネイティブにテストする唯一の方法であり、これは素晴らしいことです。
パッケージの詳細 Web サイト:
この作品は MIT ライセンスを通じてライセンスされています。
最新バージョンのnode-ipc
は、--harmonyフラグで動作する可能性があります。ただし正式には、es5 および es6 ではノード v4 以降をサポートしています。
npm test
istanbul を使用して node-ipc に対してジャスミン テストを実行し、spec フォルダーにカバレッジ レポートを生成します。
sudo npm install -g jasmine istanbul
を使用して、ジャスミンとイスタンブールをグローバルにインストールすることもできます。
タイプ | 安定性 | 意味 |
---|---|---|
Unix ソケットまたは Windows ソケット | 安定した | Linux、Mac、Windows に超高速通信を提供し、ネットワーク カードを回避してオーバーヘッドと遅延を削減します。ローカル Unix および Windows ソケットの例 |
TCPソケット | 安定した | ネットワーク上で最も信頼性の高い通信を実現します。ローカル IPC にも使用できますが、TCP ソケットはネットワーク カードを経由するのに対し、Unix ソケットと Windows ソケットは経由しないため、#1 の Unix ソケット実装よりも遅くなります。ローカルまたはリモートネットワークの TCP ソケットの例 |
TLSソケット | 安定した | SSL を介した構成可能で安全なネットワーク ソケット。 httpsに相当します。 TLS/SSL ドキュメント |
UDP ソケット | 安定した | 最速のネットワーク通信を実現します。 UDP は信頼性は劣りますが、TCP よりもはるかに高速です。ネットワーク接続やその他の要因によってはパケットがドロップされる可能性があるため、サウンド、ビデオ、マルチプレイヤー ゲーム データなどの重要ではないデータのストリーミングに最適です。 UDP はローカル IPC にも使用できますが、UDP ソケットはネットワーク カードを経由するのに対し、Unix および Windows ソケットは経由しないため、#1 の Unix ソケットまたは Windows ソケットの実装よりも遅くなります。ローカルまたはリモートネットワークの UDP ソケットの例 |
OS | サポートされているソケット |
---|---|
Linux | Unix、Posix、TCP、TLS、UDP |
マック | Unix、Posix、TCP、TLS、UDP |
勝つ | Windows、TCP、TLS、UDP |
ipc.config
これらの変数をipc.config
スコープに設定して、デフォルト値を上書きまたは設定します。
{
appspace : 'app.' ,
socketRoot : '/tmp/' ,
id : os . hostname ( ) ,
networkHost : 'localhost' , //should resolve to 127.0.0.1 or ::1 see the table below related to this
networkPort : 8000 ,
readableAll : false ,
writableAll : false ,
encoding : 'utf8' ,
rawBuffer : false ,
delimiter : 'f' ,
sync : false ,
silent : false ,
logInColor : true ,
logDepth : 5 ,
logger : console . log ,
maxConnections : 100 ,
retry : 500 ,
maxRetries : false ,
stopRetrying : false ,
unlink : true ,
interfaces : {
localAddress : false ,
localPort : false ,
family : false ,
hints : false ,
lookup : false
}
}
変数 | ドキュメント |
---|---|
アプリスペース | Unix ソケット (Unix ドメイン ソケット) の名前空間に使用されます。特に設定されていない場合、Unix ドメイン ソケットは、socketRoot、appspace、および ID を組み合わせて、作成またはバインド用の Unix ソケット パスを形成します。これは、システム上で多数のアプリが実行されている場合に利用できます。同じ ID を持つソケットが複数ある可能性がありますが、アプリスペースを変更しても、アプリ固有の一意のソケットは引き続き残ります。 |
ソケットルート | Unix ソケットを作成またはバインドするディレクトリ |
ID | このソケットまたはサービスの ID |
ネットワークホスト | TCP、TLS、または UDP ソケットが接続するローカルまたはリモート ホスト |
ネットワークポート | TCP、TLS、または UDP ソケットが接続するデフォルトのポート |
読み取り可能なすべて | Windows サービスを含むすべてのユーザーがパイプを読み取り可能にします |
書き込み可能なすべて | Windows サービスを含むすべてのユーザーがパイプを書き込み可能にします |
エンコーディング | ソケットで送信されるデータのデフォルトのエンコーディング。ほとんどの場合、rawBuffer が true に設定されている場合に使用されます。有効な値は、 ascii utf8 utf16le ucs2 base64 hex です。 |
生バッファ | true の場合、データは JSON としてのObject ではなく生のノードBuffer として送受信されます。これは、バイナリまたは 16 進数の IPC、および C や C++ などの言語での他のプロセスとの通信に最適です。 |
デリミタ | 各データパケットの終わりにある区切り文字。 |
同期する | 同期リクエスト。クライアントは、サーバーが応答するまで新しいリクエストを送信しません。 |
静けさ | ログのオン/オフを切り替えます。デフォルトは false で、ログがオンであることを意味します。 |
ログインカラー | ipc.log の util.inspect カラーをオン/オフにする |
対数の深さ | ipc.log中にutil.inspectの深さを設定します |
ロガー | ipc.log からの出力を受け取る関数。単一の文字列引数を取る必要があります |
最大接続数 | これは、ソケットに対して許可される接続の最大数です。現在、Unix ソケットでのみ設定されています。他のソケット タイプはシステムのデフォルトを使用します。 |
リトライ | これは、接続が失われた場合にクライアントがサーバーへの再接続を試行するまでに待機する時間 (ミリ秒) です。 UDP ソケットには Unix ソケットや TCP ソケットのようなクライアント サーバー関係がないため、これは影響しません。 |
maxRetries | 設定されている場合、各切断後、特定の接続をあきらめて完全に切断するまでの最大再試行回数を表します。 |
停止再試行中 | デフォルトは false で、クライアントは再試行間隔で無制限にサーバーへの接続を再試行し続けます。任意の数値に設定すると、クライアントは切断のたびにその数値を超えると再試行を停止します。リアルタイムで true に設定すると、maxRetries に関係なく接続試行が直ちに停止されます。 0 に設定すると、クライアントは再接続を試行しません。 |
リンクを解除する | デフォルトは true で、モジュールが起動前に IPC ソケットの削除を処理することを意味します。同じソケット上に複数のリスナーが存在するクラスター環境でnode-ipc を使用する場合は、これをfalse に設定し、独自のコードでソケットを削除する必要があります。 |
インターフェース | 主に、クライアントが接続するインターフェイスを指定するときに使用されます。 Node.js APIのsocket.connectドキュメントを参照してください。 |
これらのメソッドは IPC スコープで使用できます。
ipc.log(a,b,c,d,e...);
ipc.log は任意の数の引数を受け入れます。ipc.config.silent ipc.config.silent
設定されていない場合は、すべての引数を 1 つのスペース「 」で連結してコンソールに記録します。 ipc.config.silent がtrue
設定されている場合、連結が発生しないため、これは高速です。そうすれば、ログをそのまま残しておいても、パフォーマンスにはほとんど影響がありません。
ログは util.inspect も使用します。色、ログの深さ、および宛先をipc.config
でログに記録するかどうかを制御できます。
ipc . config . logInColor = true ; //default
ipc . config . logDepth = 5 ; //default
ipc . config . logger = console . log . bind ( console ) ; // default
ipc.connectTo(id,path,callback);
クライアントとしてローカルの Unix ソケットおよび Windows ソケットに接続するために使用されます。これは、TCP と UDP の両方が使用する必要があるネットワーク カードをバイパスするため、同じマシン上のプロセスが通信するための最も速い方法です。
変数 | 必須 | 意味 |
---|---|---|
ID | 必須 | 接続先のソケットの文字列 ID です。この ID を持つソケットは、作成時に ipc.of オブジェクトに追加されます。 |
パス | オプション | Unix ドメイン ソケット ファイルのパスです。システムが Windows の場合、これは Unix ドメイン ソケット ファイルと同じ情報を持つ適切なパイプに自動的に変換されます。設定されていない場合、デフォルトでipc.config.socketRoot + ipc.config.appspace + id になります。 |
折り返し電話 | オプション | これはソケットの作成時に実行する関数です。 |
例引数は、順序どおりであれば省略できます。
ipc . connectTo ( 'world' ) ;
または ID とコールバックだけを使用する
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'hello' ,
function ( data ) {
ipc . log ( data . debug ) ;
//if data was a string, it would have the color set to the debug style applied to it
}
)
}
) ;
またはパスを明示的に設定する
ipc . connectTo (
'world' ,
'myapp.world'
) ;
またはコールバックを使用してパスを明示的に設定する
ipc . connectTo (
'world' ,
'myapp.world' ,
function ( ) {
...
}
) ;
ipc.connectToNet(id,host,port,callback)
ネットワーク カード経由で TCP または TLS ソケットにクライアントとして接続するために使用されます。これはローカルまたはリモートにすることができます。ローカルの場合は、代わりにconnectTo
の Unix および Windows ソケット実装を使用することをお勧めします。これは、ネットワーク カードを完全に回避するため、はるかに高速です。
TLS および SSL ソケットについては、node-ipc TLS および SSL のドキュメントを参照してください。追加の要件と知っておくべき事項がいくつかあるため、独自のドキュメントが用意されています。
変数 | 必須 | 意味 |
---|---|---|
ID | 必須 | 接続先のソケットの文字列 ID です。 TCP および TLS ソケットの場合、この ID は、ソケットへの参照を使用してソケットが作成されるときにipc.of オブジェクトに追加されます。 |
ホスト | オプション | TCP または TLS ソケットが存在するホストです。指定しない場合、デフォルトでipc.config.networkHost になります。 |
ポート | オプション | TCP または TLS ソケットが存在するポート。 |
折り返し電話 | オプション | これはソケットの作成時に実行する関数です。 |
例引数は、順序どおりであれば省略できます。
したがって、デフォルトは (id,host,port,callback) ですが、次の例は (id,port,callback) または (id,host,callback) または (id,port) などの順序のままであるため、引き続き機能します。 。
ipc . connectToNet ( 'world' ) ;
または ID とコールバックだけを使用する
ipc . connectToNet (
'world' ,
function ( ) {
...
}
) ;
またはホストとパスを明示的に設定する
ipc . connectToNet (
'world' ,
'myapp.com' , serve ( path , callback )
3435
) ;
またはポートとコールバックのみを明示的に設定する
ipc . connectToNet (
'world' ,
3435 ,
function ( ) {
...
}
) ;
ipc.disconnect(id)
Unix、Windows、TCP、または TLS ソケットからクライアントを切断するために使用されます。ソケットとその参照はメモリとipc.of
スコープから削除されます。これはローカルでもリモートでも可能です。 UDP クライアントは接続を維持しないため、クライアントは存在せず、このメソッドはクライアントにとって価値がありません。
変数 | 必須 | 意味 |
---|---|---|
ID | 必須 | 切断するソケットの文字列 ID です。 |
例
ipc . disconnect ( 'world' ) ;
ipc.serve(path,callback);
クライアントがバインドできるローカルの Unix ソケット サーバーまたは Windows ソケット サーバーを作成するために使用されます。サーバーは、特定のクライアント ソケットにイベントをemit
、既知のすべてのクライアント ソケットにイベントをbroadcast
できます。
変数 | 必須 | 意味 |
---|---|---|
パス | オプション | これは Unix ドメイン ソケット ファイルのパスです。システムが Windows の場合、これは Unix ドメイン ソケット ファイルと同じ情報を持つ適切なパイプに自動的に変換されます。設定されていない場合、デフォルトでipc.config.socketRoot + ipc.config.appspace + id になります。 |
折り返し電話 | オプション | これはサーバーの起動後に呼び出される関数です。これはipc.server.on('start',function(){}); のようにイベントを開始イベントにバインドすることによっても行うことができます。 |
例引数は、順序どおりであれば省略できます。
ipc . serve ( ) ;
またはコールバックを指定する
ipc . serve (
function ( ) { ... }
) ;
またはパスを指定します
ipc . serve (
'/tmp/myapp.myservice'
) ;
またはすべてを指定する
ipc . serve (
'/tmp/myapp.myservice' ,
function ( ) { ... }
) ;
serveNet(host,port,UDPType,callback)
クライアントがバインドできる、または他のサーバーがデータを送信できる TCP、TLS、または UDP ソケット サーバーを作成するために使用されます。サーバーは、特定のクライアント ソケットにイベントをemit
、既知のすべてのクライアント ソケットにイベントをbroadcast
できます。
変数 | 必須 | 意味 |
---|---|---|
ホスト | オプション | 指定しない場合、デフォルトで os.networkInterfaces() の最初のアドレスが使用されます。 TCP、TLS、および UDP サーバーの場合、これはおそらく 127.0.0.1 または ::1 になります。 |
ポート | オプション | TCP、UDP、または TLS ソケット サーバーがバインドされるポート。指定しない場合、デフォルトは 8000 です。 |
UDPタイプ | オプション | 設定すると、サーバーが UDP ソケットとして作成されます。 「udp4」または「udp6」は有効な値です。これはデフォルトでは設定されていません。 udp6 を使用する場合は、 ::1 のような有効な IPv6 ホストを指定してください。 |
折り返し電話 | オプション | サーバー作成時に呼び出される関数 |
例引数は、順序どおりであれば省略できます。
デフォルトのTCPサーバー
ipc . serveNet ( ) ;
デフォルトのUDPサーバー
ipc . serveNet ( 'udp4' ) ;
またはコールバックで TCP サーバーを指定する
ipc . serveNet (
function ( ) { ... }
) ;
またはコールバックで UDP サーバーを指定する
ipc . serveNet (
'udp4' ,
function ( ) { ... }
) ;
またはポートを指定します
ipc . serveNet (
3435
) ;
またはすべてを指定 TCP
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
function ( ) { ... }
) ;
またはすべて UDP を指定します
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
'udp4' ,
function ( ) { ... }
) ;
変数 | 意味 |
---|---|
ipc.of | これは、 ipc.connectTo またはiupc.connectToNet を介してクライアントとしてソケットに接続するときに、ソケット接続の参照が保存される場所です。これらは、作成に使用された ID に基づいて保存されます (例: ipc.of.mySocket)。 |
ipc.サーバー | これは、 ipc.serve またはipc.serveNet によって作成されたサーバーへの参照です。 |
方法 | 意味 |
---|---|
始める | サービスを開始するには、最初にserve またはserveNet 呼び出してサーバーをセットアップする必要があります |
停止 | サーバーを閉じてサービスを停止します |
イベント名 | パラメータ | 意味 |
---|---|---|
エラー | エラーオブジェクト | エラーが発生したときにトリガーされます |
接続する | ソケットが接続されたときにトリガーされる | |
切断する | ソケットがサーバーから切断されたときにクライアントによってトリガーされます | |
ソケットが切断されました | ソケットが破壊されましたSocketID | クライアントソケットが切断されたときにサーバーによってトリガーされます |
破壊する | ソケットが完全に破壊されたときにトリガーされ、それ以上の自動再試行は行われず、すべての参照が失われます。 | |
データ | バッファ | ipc.config.rawBuffer が true でメッセージが受信された場合にトリガーされます。 |
あなたのイベントのタイプ | あなたのイベントデータ | JSON メッセージを受信したときにトリガーされます。イベント名はメッセージの型文字列になり、パラメータはメッセージのデータ オブジェクトになります (例: { type:'myEvent',data:{a:1}} |
場合によっては、node-ipc の明示的で独立したインスタンスが必要になることがあります。このようなシナリオのために、コア IPC クラスを IPC シングルトンで公開しました。
import { IPCModule } from 'node-ipc' ;
const ipc = new RawIPC ;
const someOtherExplicitIPC = new RawIPC ;
//OR
const ipc = from 'node-ipc' ) ;
const someOtherExplicitIPC = new ipc . IPC ;
//setting explicit configs
//keep one silent and the other verbose
ipc . config . silent = true ;
someOtherExplicitIPC . config . silent = true ;
//make one a raw binary and the other json based ipc
ipc . config . rawBuffer = false ;
someOtherExplicitIPC . config . rawBuffer = true ;
someOtherExplicitIPC . config . encoding = 'hex' ;
高度な例は、example フォルダーにあります。例には、マルチクライアントの例を含む、より複雑なデモが含まれています。
サーバーは、IPC 用のソケットを開いたままにするプロセスです。複数のソケットがこのサーバーに接続して通信できます。すべてのクライアントにブロードキャストしたり、特定のクライアントに送信したりすることもできます。これは、ローカルの Unix および Windows ソケットだけでなく、ローカルまたはリモート ネットワークの TCP ソケットでも機能する最も基本的な例です。
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serve (
function ( ) {
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message : ' . debug , data ) ;
ipc . server . emit (
socket ,
'message' , //this can be anything you want so long as
//your client knows.
data + ' world!'
) ;
}
) ;
ipc . server . on (
'socket.disconnected' ,
function ( socket , destroyedSocketID ) {
ipc . log ( 'client ' + destroyedSocketID + ' has disconnected!' ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
クライアントはプロセス間通信のためにサーバーのソケットに接続します。ソケットは、サーバーによってソケット上にブロードキャストされるイベントだけでなく、ソケットに固有に発行されたイベントも受信します。これは、ローカル Unix ソケットとローカルまたはリモート ネットワークの TCP ソケットの両方で機能する最も基本的な例です。
import ipc from 'node-ipc' ;
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . log ( '## connected to world ##' . rainbow , ipc . config . delay ) ;
ipc . of . world . emit (
'message' , //any event or message type your server listens for
'hello'
)
}
) ;
ipc . of . world . on (
'disconnect' ,
function ( ) {
ipc . log ( 'disconnected from world' . notice ) ;
}
) ;
ipc . of . world . on (
'message' , //any event or message type your server listens for
function ( data ) {
ipc . log ( 'got a message from world : ' . debug , data ) ;
}
) ;
}
) ;
UDP ソケットは、メッセージを受信するためにマシン上の固有のポートにバインドする必要があるため、Unix、Windows、および TCP ソケットとは異なります。たとえば、TCP、Unix、または Windows ソケット クライアントは、別の TCP、Unix、または Windows ソケット サーバーに接続することができます。そのクライアントは、サーバーのポートまたは場所でデータを交換 (送信と受信の両方) できるようになります。 UDP ソケットではこれができません。データを送受信するにはポートにバインドする必要があります。
これは、データを受信するために UDP ソケットにデータを受信するための独自のポートが必要であり、一度に 1 つのプロセスのみがこのポートを使用できるため、UDP クライアントとサーバーは同じものであることを意味します。また、これは、データをemit
またはbroadcast
ために、UDP サーバーがデータのブロードキャスト先となるソケットのホストとポートを知る必要があることも意味します。
これは、ローカルとリモートの両方の UDP ソケットで機能する最も基本的な例です。
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
'udp4' ,
function ( ) {
console . log ( 123 ) ;
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
ipc . server . emit (
socket ,
'message' ,
{
from : ipc . config . id ,
message : data . message + ' world!'
}
) ;
}
) ;
console . log ( ipc . server ) ;
}
) ;
ipc . server . start ( ) ;
ワールドサーバーがすでにデフォルトの ipc.config.networkPort の 8000 を使用しているため、ここでポートを 8001 に設定していることに注意してください。したがって、ワールドが使用している間は 8000 にバインドできません。
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
8001 ,
'udp4' ,
function ( ) {
ipc . server . on (
'message' ,
function ( data ) {
ipc . log ( 'got Data' ) ;
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
}
) ;
ipc . server . emit (
{
address : '127.0.0.1' , //any hostname will work
port : ipc . config . networkPort
} ,
'message' ,
{
from : ipc . config . id ,
message : 'Hello'
}
) ;
}
) ;
ipc . server . start ( ) ;
バイナリ ソケットまたはバッファ ソケットは上記のソケット タイプのいずれでも使用できますが、データ イベントの発行方法は若干異なります。これらは、組み込みシステムまたは C / C++ プロセスを使用する場合に便利です。 C または C++ の文字列入力を確実に一致させることもできます。
rawBuffer ソケットを設定するときは、次のように指定する必要があります。
ipc . config . rawBuffer = true ;
エンコードタイプを指定することもできます。デフォルトはutf8
です
ipc . config . encoding = 'utf8' ;
文字列バッファを出力します:
//server
ipc . server . emit (
socket ,
'hello'
) ;
//client
ipc . of . world . emit (
'hello'
)
バイト配列バッファを出力します:
//hex encoding may work best for this.
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 10 , 20 , 30 ]
) ;
//client
ipc . server . emit (
[ 10 , 20 , 30 ]
) ;
バイナリまたは 16 進配列バッファを出力します。これは、特に C または C++ プロセス、または組み込みシステムに接続する場合のリアルタイム データ転送に最適です。
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 0x05 , 0x6d , 0x5c ]
) ;
//client
ipc . server . emit (
[ 0x05 , 0x6d , 0x5c ]
) ;
明示的なバッファー、int 型、double、float など、およびビッグ エンディアンおよびリトル エンディアン データを生のバッファーに書き込むことは、C または C++ プロセス、または組み込みシステムに接続するときに非常に貴重です (バッファーおよび UInt、Int に関する詳細情報を参照してください) 、double などはここにあります)[https://nodejs.org/api/buffer.html]:
ipc . config . encoding = 'hex' ;
//make a 6 byte buffer for example
const myBuffer = Buffer . alloc ( 6 ) . fill ( 0 ) ;
//fill the first 2 bytes with a 16 bit (2 byte) short unsigned int
//write a UInt16 (2 byte or short) as Big Endian
myBuffer . writeUInt16BE (
2 , //value to write
0 //offset in bytes
) ;
//OR
myBuffer . writeUInt16LE ( 0x2 , 0 ) ;
//OR
myBuffer . writeUInt16LE ( 0x02 , 0 ) ;
//fill the remaining 4 bytes with a 32 bit (4 byte) long unsigned int
//write a UInt32 (4 byte or long) as Big Endian
myBuffer . writeUInt32BE (
16772812 , //value to write
2 //offset in bytes
) ;
//OR
myBuffer . writeUInt32BE ( 0xffeecc , 0 )
//server
ipc . server . emit (
socket ,
myBuffer
) ;
//client
ipc . server . emit (
myBuffer
) ;
cluster
モジュールを搭載したサーバーnode-ipc
Node.js のクラスター モジュールと一緒に使用すると、単一のソケットに複数のリーダーを持つ機能を提供できます。これを行うには、構成内のunlink
プロパティをfalse
に設定し、マスター プロセスでソケット パスのリンクを解除するだけで済みます。
import fs from 'fs' ;
import ipc from 'node-ipc' ;
import { cpus } from 'os' ;
import cluster from 'cluster' ;
const cpuCount = cpus ( ) . length ;
const socketPath = '/tmp/ipc.sock' ;
ipc . config . unlink = false ;
if ( cluster . isMaster ) {
if ( fs . existsSync ( socketPath ) ) {
fs . unlinkSync ( socketPath ) ;
}
for ( let i = 0 ; i < cpuCount ; i ++ ) {
cluster . fork ( ) ;
}
} else {
ipc . serve (
socketPath ,
function ( ) {
ipc . server . on (
'currentDate' ,
function ( data , socket ) {
console . log ( `pid ${ process . pid } got: ` , data ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
console . log ( `pid ${ process . pid } listening on ${ socketPath } ` ) ;
}
import fs from 'fs' ;
import ipc from 'node-ipc' ;
const socketPath = '/tmp/ipc.sock' ;
//loop forever so you can see the pid of the cluster sever change in the logs
setInterval (
function ( ) {
ipc . connectTo (
'world' ,
socketPath ,
connecting
) ;
} ,
2000
) ;
function connecting ( socket ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . of . world . emit (
'currentDate' ,
{
message : new Date ( ) . toISOString ( )
}
) ;
ipc . disconnect ( 'world' ) ;
}
) ;
}
MIT ライセンス ファイルを参照してください。
ごめんなさい。