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 相关文章推荐
Javascript 面向对象之重载
May 04 Javascript
Jquery练习之表单验证实现代码
Dec 14 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
Sep 22 Javascript
封装属于自己的JS组件
Jan 27 Javascript
浅谈js多维数组和hash数组定义和使用
Jul 27 Javascript
bootstrapValidator自定验证方法写法
Dec 01 Javascript
jquery仿苹果的时间/日期选择效果
Mar 08 Javascript
微信小程序 数据绑定及运算的简单实例
Sep 20 Javascript
详解Angular路由之路由守卫
May 10 Javascript
Layui数据表格 前后端json数据接收的方法
Sep 19 Javascript
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
HTML+JS实现在线朗读器
Feb 15 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/07/13 国漫
php使用ICQ网关发送手机短信
2013/10/30 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
asm.js使用示例代码
2013/11/28 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
2016/02/26 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
webpack+vue-cil 中proxyTable配置接口地址代理操作
2020/07/18 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
一起深入理解js中的事件对象
2021/02/06 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
Python 文件重命名工具代码
2009/07/26 Python
Python动态加载模块的3种方法
2014/11/22 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
预备党员政审材料
2014/02/04 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
开学典礼演讲稿
2014/05/23 职场文书
2015年大学生党员承诺书
2015/04/27 职场文书
新学期新寄语,献给新生们!
2019/11/15 职场文书
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript