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 相关文章推荐
Prototype使用指南之selector.js
Jan 10 Javascript
Javascript 定时器调用传递参数的方法
Nov 12 Javascript
jquery.validate使用攻略 第二部
Jul 01 Javascript
JavaScript二维数组实现的省市联动菜单
May 08 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
微信小程序  modal详解及实例代码
Nov 09 Javascript
js实现右键菜单功能
Nov 28 Javascript
Webpack打包css后z-index被重新计算的解决方法
Jun 18 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
Aug 03 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
原生js实现五子棋游戏
May 28 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
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
Php无限级栏目分类读取的实现代码
2014/02/19 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
微信支付的开发流程详解
2016/09/13 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
使用jQuery判断浏览器滚动条位置的方法
2016/05/30 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
vue-router路由模式详解(小结)
2019/08/26 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
Python浅复制中对象生存周期实例分析
2018/04/02 Python
Python坐标线性插值应用实现
2019/11/13 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
办公室文秘自我评价
2013/09/21 职场文书
小学运动会表扬稿
2014/01/19 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
五一促销活动总结
2014/07/01 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
黑暗中的舞者观后感
2015/06/18 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
linux中nohup和后台运行进程查看及终止
2021/06/24 Python
python字符串的一些常见实用操作
2022/04/06 Python
在 Python 中利用 Pool 进行多线程
2022/04/24 Python