Node学习记录之cluster模块

在如今机器的cpu都是多核的背景下,Node的单线程设计已经没法更充分的"压榨"机器性能了。所以从v0.8开始,Node新增了一个内置模块——“cluster”,故名思议,它可以通过一个父进程管理一坨子进程的方式来实现集群的功能

rush:js;"> var cluster = require('cluster'); var http = require('http'); var numcpus = require('os').cpus().length; // 获取cpu的个数

if (cluster.isMaster) {
for (var i = 0; i < numcpus; i++) {
cluster.fork();
}

cluster.on('exit',function(worker,code,signal) {
console.log('worker ' + worker.process.pid + ' died');
});
} else {
http.createServer(function(req,res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);
}

通过isMaster属性,判断是否Master进程,是则fork子进程,否则启动一个server。每个HTTP server都能监听到同一个端口。但是在实际项目中,我们的启动代码一般都已经封装在了app.js中,要把整块启动逻辑嵌在上面的if else中实在不优雅。 所以,我们可以这样:

rush:js;"> var cluster = require('cluster'); var numcpus = require('os').cpus().length;

if (cluster.isMaster) {
for (var i = 0; i < numcpus; i++) {
cluster.fork();
}
// 其它代码

} else {
require("./app.js");
}

简单之处就在于原本的应用逻辑根本不需要知道自己是在集群还是单边。(当然,如果应用在内存中维护了某些状态,比如session,就需要运用某些机制来共享了,这里不详说)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...