node.js - 使用PM2时如何配置master进程

标签 node.js ipc pm2

我在 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/

相关文章:

node.js - 将 pm2 与 ansible 结合使用

node.js - 如何用WebSockets、Nodejs实现PM2集群

node.js - 具有单个数据库的多个 Node 实例

php - php和boost库IPC如何通信?

linux - 如果我使用 Putty 登录,Teamcity SSH Exec 无法执行我可以执行的命令

c - ipcs -s 不显示命名信号量

python - 使用 websockets 是 IPC 的好主意吗?

node.js - 杀死所有子进程,但不杀死父进程

javascript - 为什么我的回调以字符串形式发送?

c# - 使用 Azure 进行存储的 Web 应用程序