2015-12-24 40 views
5

NodeJS'de PM2 ile ilgili bir sorunum var. PM2 olmadan , her zamanPM2'yi kullanırken ana işlemi nasıl yapılandırabiliriz?

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

Kesinlikle, ben usta bir işçinin gelen mesaj göndermek istediğiniz kalıp işlemini yapılandırmak için aşağıdaki gibi kod bazı hatları var, o zaman, ana bildirimi için tüm işçilere bir iletiyi geri gönderir bir etkinlik.

Aslında, PM2'yi kullanırken ana işlem yapılandırmasında hiçbir kod satırının çalışmadığını gördüm.

Bu sorun hakkında herhangi bir fikir için çok teşekkürler!

cevap

6

PM2 ile genellikle bu konstrüksiyonu kullanmak zorunda değilsiniz. Tipik olarak, bu gibi görünüyor şu:

PM2 ile yukarıda için eşdeğerdir
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); 
} 

:

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>

Eğer konu hakkında daha fazla yukarı okuyabilir here

Güncelleştirme: Komut satırı argümünü geçerek master ile slave arasında ayrım yapmaya çalışabilirsiniz. veliler. İşte bir örnek ecosystem.json geçerli:

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

Sonra aşağıdakileri yapabilirsiniz:

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

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

PM2 sadece işçilerin otomatik olarak çatallanmasına yardımcı olur, ancak aşağıdaki gibi bir şey uygulayamazsınız: worker.on ('message', messageHandler) işçiden alınan mesajlara worker :( – thelonglqd

+1

"master" 'ı ayrı ayrı kendiniz yetiştirmeniz iyi olur mu ? Oldukça garip, ancak ekosistemde master için ayrı bir giriş ekliyor.json PM2, örnekler için env değişkenleri belirtmenize izin veriyor, master ve slave arasında ayrım yapmanıza yardımcı olabilir. – bublik42

0

PM2 içten, daha sonra kendisi efendi gibi davranır, çocuk süreçleri oluşturmak için "cluster" kullanır ve değil Dışa herhangi bir işlev sağlar. İşlemi oluşturmak için hala aşağıdaki kodu kullanabilirsiniz, ancak cluster.isMaster her zaman yanlış olmuştur.

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

böyle başlamak sürece: pm2 start -x app.jshttps://github.com/Unitech/pm2/issues/363

PM2 tasarımı iyidir, ama yeni başlayanlar için karışıklığı getiriyor. Dokümanlara ve Google aramalarına bakmak için elimizden gelen her şeyi yapıyoruz, ancak tasarım hakkında herhangi bir açıklama bulmak zor.