如何在使用PM2时configuration主进程
我在NodeJS中遇到了PM2问题。 没有PM2,我们总是会有一些如下的代码来configuration主进程
if(cluster.isMaster){ //master process configuration } else { //worker process configuration }
确切地说,我想发送一个工人的信息给主人,然后主人会发回一个信息给所有的工作人员通知一个事件。
实际上,我看到,在使用PM2时,主进程configuration中没有任何代码行。
非常感谢关于这个问题的任何想法!
有了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); }
与PM2相当的是:
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>
你可以在这里阅读更多的话题
更新 :你可以尝试通过传递命令行参数来区分主从。 以下是一个ecos.json的例子:
{ "apps" : [ { "name": "Master", "script": "app.js", "args": ["master"], "instances": "1", }, { "name": "Slave", "script": "app.js", "args": ["slave"], "instances": "3" } ], ...
然后你可以做到以下几点:
argv = process.argv.slice(2) //stripe 'node', 'app.js' away if (argv[0] === 'master'){ // ... } else { // ... }
PM2在内部使用“集群”来创buildsubprocess,然后自己作为主进程,并且不向外部提供任何function。 您仍然可以使用以下代码来创build过程,但是cluster.isMaster一直是错误的。
if(cluster.isMaster){ ... cluster.fork(); ... } else { ... }
除非你像这样开始: pm2 start -x app.js
https://github.com/Unitech/pm2/issues/363
PM2的devise很好,但给初学者带来困惑。 我们尽我们所能去查看文档和Googlesearch,但很难find关于devise的任何解释。