本文介绍了使用PM2时如何配置主进程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在NodeJS中的PM2有问题。如果没有PM2,我们总是有一些代码行来配置主进程,如下所示

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

确切地说,我想从Worker向Master发送消息,然后Master将向所有Worker发回一条消息,以通知一个事件。

实际上,我看到在使用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);
}

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

主题的更多信息

更新:您可以尝试通过传递命令行参数来区分主从。以下是一个示例ECOystem.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时如何配置主进程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 17:09