我在 NodeJS 中遇到 PM2 问题。 在没有pm2的情况下,我们总是有如下几行代码来配置master进程
if(cluster.isMaster){
//master process configuration
} else {
//worker process configuration
}
确切地说,我想从一个worker发送消息给master,然后master会发回一条消息给所有worker,通知一个事件。
实际上,我看到,使用 PM2 时,master 进程配置中没有代码行运行。
非常感谢您对这个问题的任何想法!
最佳答案
对于 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>
您可以阅读有关该主题的更多信息 here
更新:您可以尝试通过传递命令行参数来区分主从。 这是一个示例 ecosystem.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 {
// ...
}
关于node.js - 使用PM2时如何配置master进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34446969/