Node.js在v0.6.0版本下内置了集群功能,作为cluster模块,用于nodejs的多核处理,也比较容易通过脚本实现一个负载均衡的集群。

脚本参考了其他人的材料,建立一个server.js(因为虚拟机只有1核,为模拟多线程,所以采用numCPUs+4)

var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;if (cluster.isMaster) {console.log('[master] ' + "start master...");for (var i = 0; i < numCPUs+4; i++) {cluster.fork();}cluster.on('listening', function (worker, address) {console.log('[master] ' + 'listening: worker' + worker.id + ',pid:' + worker.process.pid + ', Address:' + address.address + ":" + address.port);});} else if (cluster.isWorker) {console.log('[worker] ' + "start worker ..." + cluster.worker.id);http.createServer(function (req, res) {console.log('worker'+cluster.worker.id);res.end('worker'+cluster.worker.id+',PID:'+process.pid);}).listen(3000);
}

启动服务器可以看到日志

$ node server.js
[master] start master...
[worker] start worker ...1
[master] listening: worker1,pid:2925, Address:0.0.0.0:3000
[worker] start worker ...3
[master] listening: worker3,pid:2931, Address:0.0.0.0:3000
[worker] start worker ...4
[master] listening: worker4,pid:2932, Address:0.0.0.0:3000
[worker] start worker ...2
[master] listening: worker2,pid:2930, Address:0.0.0.0:3000
worker4
worker2
worker1
worker3
worker4
worker2
worker1

通过curl访问可以看到route到不同的进程
curl 192.168.1.20:3000
worker4,PID:2932
curl 192.168.1.20:3000
worker2,PID:2930

但如何和我们的Express框架结合起来呢,通过npm start实际上是启动了package.json上的script脚本node ./bin/www

具体打开www文件,发现详细的创建Server的命令,所以需要直接修改这个文件.修改如下:

#!/usr/bin/env node

/**
* Module dependencies.
*/

var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
var app = require('../app');
var debug = require('debug')('myapp-express:server');
var http = require('http');

if (cluster.isMaster) {
console.log('[master] ' + "start master...");

for (var i = 0; i < numCPUs+4; i++) {
cluster.fork();
}

cluster.on('listening', function (worker, address) {
console.log('[master] ' + 'listening: worker' + worker.id + ',pid:' + worker.process.pid + ', Address:' + address.address + ":" + address.port);
});

} else if (cluster.isWorker) {
console.log('[worker] ' + "start worker ..." + cluster.worker.id);
http.createServer(app).listen(3000);
/*
http.createServer(app) {
console.log('worker'+cluster.worker.id);
res.end('worker'+cluster.worker.id+',PID:'+process.pid);

}).listen(3000);*/
}



启动后能正常访问网页

但在后台的日志中无法显示调用的process的信息所以我们不知道是否真的作到负载均衡了.

研究了一下,页面还是走到routes目录下的index.js模块,所以在index.js下加入console.log信息,这样基本上访问的时候就知道是走到哪个进程实现调用

router.get('/about',function(req,res) {
console.log(process.pid);
res.render('about',{titile:"Introduction"});
});

经过实践,同一个firefox的请求会路由到同一个进程pid,关闭在重新打开会路由到另一个pid.



转载于:https://www.cnblogs.com/ericnie/p/5958562.html

Node.js的集群功能以及在Express的配置相关推荐

  1. 集群资源分配_分析下 Node.js 关于集群的那些事

    需要了解的基础概念 一个应用程序中,至少包含一个进程,一个进程至少包含一个线程. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 线程(Thr ...

  2. node.js - 收藏集

    如何部署 Node.js 应用 - 后端 - 掘金 当你熟悉 Node.js 之后很可能会自己写些小东西放在 VPS 上跑,比如说一个个人的 API 服务,或者是你的网站.这篇文章分享的内容不管你的 ...

  3. 在集群的操作机上执行命令为什么会出现权限被拒绝_如何使用 TDengine 2.0 最新开源的集群功能?

    导读:8月3日,TDengine 发布了 v2.0 版本,这次更新最大的亮点是,我们将分布式集群功能开源.开源后,引起了很大反响,又连续几天在 GitHub 趋势榜排名第一.不少关注TDengine的 ...

  4. webpack VS Node.js - 二者对 require 功能的实现区别

    原文 Webpack 被广泛用于大部分前端项目. Webpack 有很多内容,本文我不会全部介绍,但我确实想谈谈某些方面. 调试项目时最重要的信息之一,是了解导致您看到的错误的技术.它可以帮助您更有效 ...

  5. 不仅性能秒杀Hadoop,现在连分布式集群功能也开源了

    就在昨天(2020年8月3日),涛思数据团队正式宣布,物联网大数据平台TDengine集群版开源.此次开源,我们在GitHub上传了23.9万行源代码,1198个源文件,包含我自己疫情期间写的一万余行 ...

  6. WebStorm 打开Node.js的代码提示功能

    Node.js coding assistance is disabled,Suggests configuring coding assistance for Node.js core module ...

  7. node.js发送html,利用Node.JS实现邮件发送功能

    第一步.配置篇 首先需要安装nodemailer库 npm install nodemailer//默认会安装最新的版本. 关于这个库的文档参见nodemailer 第二步.库的一些使用介绍 这个库使 ...

  8. 风生水起才知天高云淡 - 浮云贴 - 百万商业圈云平台之分布式集群功能介绍

    风生水起才知天高云淡 - 浮云贴 - 百万商业圈云平台之分布式集群功能介绍 百万商业圈云平台之分布式集群(BDC)即将开发完毕 目标: 百万商业圈云平台之分布式集群 简称:BDC 全称:Bwsyq.D ...

  9. nacos集群的ap cp切换_配置中心Nacos

    Nacos概述 英文全称Dynamic Naming and Configuration Service,是指该注册/配置中心都是以服务为核心. Nacos是阿里云中间件团队开源的一个项目.项目地址: ...

  10. Node.js + Consul 实现服务注册、健康检查、配置中心

    Node.js + Consul 实现服务注册.健康检查.配置中心 在这篇文章中: 初始化 Consul 客户端 服务注册与健康检查 配置Consul管理控制台 服务配置中心实现 在Nodejs中进行 ...

最新文章

  1. java窗口怎么实现修改密码_【求助】Java中如何实现更改windows密码
  2. mac电脑抹掉数据要多久_macbook怎么抹掉所有的数据?
  3. 强烈推荐十大NLP主流经典项目:预训练BERT、知识图谱、智能问答、机器翻译、文本自动生成等...
  4. 机器人的动力学和动力学联系_通过机器学习了解幸福动力学(第2部分)
  5. 解决larave-dompdf中文字体显示问题
  6. mysql 数据库查询测试_MySQL查询测试经验
  7. 程序员面试金典 - 面试题 08.05. 递归乘法(位运算)
  8. MONGOOSE – 让NODE.JS高效操作MONGODB(转载)
  9. php的全局p变量程序_php全局变量的使用
  10. SQL查询效率注意事项 2011.12.27
  11. python将图片原比例缩小_Python批量按比例缩小图片脚本分享
  12. Halcon 抓圆工具spoke
  13. 泰拉瑞亚Terraria for Mac(动作冒险游戏)
  14. 深入浅出MFC之6大技术 消息映射及命令传递 DECLARE_MESSAGE_MAP 和 ON_NOTIFY ON_COMMAND ON_MESSAGE 三大难点解析
  15. opencv访问图片的每一像素
  16. 论文阅读(8)Cool your jets:海洋无脊椎动物的生物喷射推进(2021)
  17. h3c服务器增加硬盘,H3C服务器硬盘配置Raid
  18. AI智能配音助手微信小程序源码支持多种声音场景选择
  19. js中的关键字总结呢
  20. Python电脑桌面每天更新壁纸

热门文章

  1. WPF之DatePicker使其只能选择日期,不能输入日期
  2. 如何测试前台获得的数据
  3. [傅里叶变换及其应用学习笔记] 二十二. 快速傅里叶变换
  4. jquery 分页插件
  5. nusoap 与 CI框架不用WSDL
  6. java in list,Java 8流过滤:IN子句
  7. 超级外链工具_慈溪SEO优化_豆瓣外链:豆瓣小组做外链的注意事项?
  8. Unity子线程编程无法报错
  9. Eclipse for python环境搭建及创建python项目
  10. 设计模式---备忘录模式(C++实现)