2015-12-24 4 views
5

NodeJSのPM2に問題があります。 PM2がなければ、私たちは常に正確PM2を使用するときにマスタープロセスを設定する方法

if(cluster.isMaster){ 
    //master process configuration 
} else { 
    //worker process configuration 
} 

マスタープロセスを設定するには、以下のようなコードのいくつかの行を持って、私はその後、マスターは、通知のために、すべての労働者にメッセージを送り返します、マスターに労働者からのメッセージを送信したいですイベント。

実際には、PM2を使用しているときにマスタプロセス構成のコード行は実行されません。

この問題についてご意見ありがとうございます。

答えて

6

PM2の場合、通常、この構成を使用する必要はありません。一般的に、それは次のようになります。

PM2で
var cluster = require('cluster'); 
var http = require('http'); 
var os  = require('os'); 
var numCPUs = os.cpus().length; 

if(cluster.isMaster){ 
    for (var i = 0; i < numCPUs; ++i) { 
    cluster.fork(); 
    } 
} else { 
    http.createServer(function(req, res) { 
    res.writeHead(200); 
    res.end("hello world"); 
    }).listen(8080); 
} 

上記の等価です:

あなたが話題 here

によりアップ読むことができます

var http = require('http'); http.createServer(function(req, res) { res.writeHead(200); res.end("hello world"); }).listen(8080); 

pm2 start app.js -i <number of instances>

アップデート:コマンドラインのargumを渡すことで、マスタとスレーブを区別することができますents。ここで は、例えばecosystem.jsonです:

{ 
    "apps" : [ 
    { 
     "name": "Master", 
     "script": "app.js", 
     "args": ["master"], 
     "instances": "1", 
    }, 
    { 
     "name": "Slave", 
     "script": "app.js", 
     "args": ["slave"], 
     "instances": "3" 
    } 
    ], 
... 

その後、次の操作を行うことができます。PM2は、内部的に子プロセスを作成するには、「クラスタ」を使用しています

argv = process.argv.slice(2) //stripe 'node', 'app.js' away 

if (argv[0] === 'master'){ 
    // ... 
} else { 
    // ... 
} 
+0

PM2はワーカーを自動的にフォークするのに役立ちますが、worker.on( 'message'、messageHandler)のようなものを実装することはできません:workerから受け取ったメッセージを処理する:( – thelonglqd

+1

"master"を別に生成する? PM2では、マスターとスレーブの区別に役立つインスタンスのenv変数を指定することができます。 – bublik42

0

、その後、自身がマスターとして機能せず、外部にあらゆる機能を提供する。次のコードを使用してプロセスを作成することはできますが、cluster.isMasterは常にfalseです。

if(cluster.isMaster){ 
    ... 
    cluster.fork(); 
    ... 
} else { 
    ... 
} 

あなたはこのように起動しない限り:pm2 start -x app.jshttps://github.com/Unitech/pm2/issues/363

PM2のデザインは良いですが、それは初心者に混乱をもたらします。私たちは文書やGoogle検索を見るためにできることはすべてやっていますが、デザインについての説明はほとんどありません。

関連する問題