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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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服务,他的代码和我们平常写的一样。
例如:

1
2
3
4
5
6
var http = require('http');
http.createServer(function(req, res) {
res.writeHead(200);
res.end("hello world");
}).listen(8080);

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"apps" : [
{
"name": "Master",
"script": "app.js",
"args": ["master"],
"instances": "1",
},
{
"name": "Slave",
"script": "app.js",
"args": ["slave"],
"instances": "-1"
}
]
}

然后在app.js中这样写:

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

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