Node学习记录之cluster模块


Posted in Javascript onMay 31, 2017

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

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中实在不优雅。 所以,我们可以这样:

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,就需要运用某些机制来共享了,这里不详说)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery随机切换图片的小例子
Apr 18 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
Nov 03 Javascript
js简单实现用户注册信息的校验代码
Nov 15 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
May 18 Javascript
详谈JS中实现种子随机数及作用
Jul 19 Javascript
Javascript中apply、call、bind的巧妙使用
Aug 18 Javascript
Ajax使用原生态JS验证用户名是否存在
May 26 Javascript
利用jquery实现验证输入的是否是数字、小数,包含保留几位小数
Dec 07 Javascript
js放大镜放大购物图片效果
Jan 18 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
Feb 01 Javascript
vue 将多个过滤器封装到一个文件中的代码详解
Sep 05 Javascript
Express框架之connect-flash详解
May 31 #Javascript
node.js中express-session配置项详解
May 31 #Javascript
详解angularjs中如何实现控制器和指令之间交互
May 31 #Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 #Javascript
JS简单实现自定义右键菜单实例
May 31 #Javascript
页面间固定参数,通过cookie传值的实现方法
May 31 #Javascript
基于react框架使用的一些细节要点的思考
May 31 #Javascript
You might like
重置版宣传动画
2020/04/09 魔兽争霸
php fsockopen伪造post与get方法的详解
2013/06/14 PHP
Javascript中Eval函数的使用说明
2008/10/11 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
2014/03/05 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
Vue可自定义tab组件用法实例
2019/10/24 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
2020/07/20 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
研究生自荐信
2013/10/09 职场文书
自荐信如何“自荐”
2013/10/24 职场文书
司机的工作范围及职责
2013/11/13 职场文书
防灾减灾活动总结
2014/08/30 职场文书
自我工作评价范文
2015/03/06 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
小学生读书笔记范文
2015/06/30 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript