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 相关文章推荐
js中function()使用方法
Dec 24 Javascript
Node.js实现的简易网页抓取功能示例
Dec 05 Javascript
js的for in循环和java里foreach循环的区别分析
Jan 28 Javascript
jQuery实现图片预加载效果
Nov 27 Javascript
jQuery unbind()方法实例详解
Jan 19 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
使用cropper.js裁剪头像的实例代码
Sep 29 Javascript
AngularJS下$http服务Post方法传递json参数的实例
Mar 29 Javascript
json对象及数组键值的深度大小写转换问题详解
Mar 30 Javascript
Vue filter格式化时间戳时间成标准日期格式的方法
Sep 16 Javascript
小程序富文本提取图片可放大缩小
May 26 Javascript
keep-Alive搭配vue-router实现缓存页面效果的示例代码
Jun 24 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
PHP4实际应用经验篇(5)
2006/10/09 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
Javascript 类、命名空间、代码组织代码
2011/07/31 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
2016/01/22 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
浅析Vue 防抖与节流的使用
2019/11/14 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
Vue项目开发常见问题和解决方案总结
2020/09/11 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
编写类String的构造函数、析构函数和赋值函数
2012/05/29 面试题
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
局域网定义和特性
2016/01/23 面试题
投标担保书范文
2014/04/02 职场文书
《白鹅》教学反思
2014/04/13 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
Go timer如何调度
2021/06/09 Golang