本文首发于个人博客 Cyy’s Blog
转载请注明出处 https://cyyjs.top/blog/5b45b0dbe54ee334f67518db

node 集群启动模式通常会这样写

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)
}

我们可以通过cluster.isMaster来执行一些任务;
pm2是一个很好的nodejs 管理工具,我们可以通过配置来启动我们的nodejs服务,他的代码和我们平常写的一样。

例如:

var http = require('http')

http
    .createServer(function(req, res) {
        res.writeHead(200)
        res.end('hello world')
    })
    .listen(8080)

但是我们想只在master上做一些任务,改怎么做呢?下面跟出一中方法:我们可以通过两个配置,分别指定不同的命令行参数来区别:

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

然后在app.js中这样写:

if (process.argv[2] === 'master') {
    // ...
} else {
    // ...
}

也可以通过其他环境变量参数来区分那个是master