Nodejs【单机】多进程模式集群实例:

1、安装:npm install -s cluster

2、服务代码:

var debug = require('debug');
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var mockServer = function () {
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
// catch 404 and forward to error handler
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
process.env.PORT = 8103;
app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function () {
console.log('服务启动:' + server.address().port);
});
}
module.exports = exports = mockServer;

3、启动文件加集群模式:

var path = require("path");
var mockfile = path.join(__dirname, './', 'mockServer');
var mockServer = require(mockfile);
var cluster = require('cluster')
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log("宿主启动...");
//var data = 0;
for (var i = 0; i < numCPUs; i++) {
//cluster.fork();
var worker_process = cluster.fork();
//侦听子进程的message事件 
worker_process.on('message', function (msg) {
if (msg.cmd && msg.cmd == 'notifyRequest') {
//data++;
//console.log('DATA VALUE : %d ', data);
}
});
}
cluster.on('listening', function (worker, address) {
//console.log('pid:' + worker.process.pid);
});
cluster.on('exit', function (worker, code, signal) {
console.log('pid:' + worker.process.pid + ' 重启');
setTimeout(function () { cluster.fork(); }, 2000);
});
} else {
var server = new mockServer();
process.on('message', function (msg) {
if (msg === 'shutdown') {
// initiate graceful close of any connections to server
}
});
console.log('worker #' + cluster.worker.id + ",pid:" + cluster.worker.process.pid);
//process.send({ cmd: 'notifyRequest' });
}

Nodejs【单机】多进程模式集群相关推荐

  1. rabbitmq使用_RabbitMQ的使用(二) RabbitMQ服务在单机中做集群

    作者:markjiang7m2 博客园地址:https://www.cnblogs.com/markjiang7m2/p/12837151.html 官网地址:http://letyouknow.ne ...

  2. 亿级Web系统搭建:单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  3. 饱受ddos/cc攻击的站长朋友们,选高防服务器该选单机防御还是集群防御呢?

    4年前锤子科技CEO罗永浩在开发布会的时候遭遇DDOS攻击,导致部分内容展示不了.3年前,大名鼎鼎的程序员圣地github遭受高达2T的DDOS攻击,当时是历史上有史以来遭受的最大攻击,不过Githu ...

  4. 从零开始搭建高可用RabbitMQ镜像模式集群

    文章目录 RabbitMQ集群模式搭建 准备工作 选取任意一个节点作为master节点, 进行文件同步, 我这里选择138作为master节点 组成集群 配置镜像队列(设置镜像队列策略) 集群配置参数 ...

  5. 单机服务器、集群和分布式

    单机服务器.集群和分布式 单机服务器,故名思意,就是一台服务器提供所有功能,所有客户端的连接都在一台服务器上. 集群:每一台服务器独立运行一个工程的所有模块. 分布式:一个工程拆分了很多模块,每一个模 ...

  6. Redis入门(七):Redis分布式锁(单机模式/集群模式)

    Redis 实现分布式锁 单机模式的Redis分布式锁 集群模式的Redis分布式锁 Redlock Redis 实现分布式锁 单机模式的Redis分布式锁 优缺点 实现比较轻,大多数时候能满足需求: ...

  7. Linux中级实战专题篇:rabbitmq(消息中间件p2p模式和pub模式,消息队列rabbitmq详解,单机安装,集群部署以及配置实战)

    一.消息中间件相关概念 1.简介 消息中间件也可以称消息队列,是指用高效可靠的消息传递机制进行与平台相关 的数据交流,并基于数据通信来进行分布式系统的集成.通过提供消息传递和消息 队列模型,可以在分布 ...

  8. Redis单机模式主从模式哨兵模式集群模式搭建

    文章目录 一.Redis下载及安装 1.1.下载 1.2.环境安装 1.3.编译安装 1.4.修改配置 1.5.启动Redis 1.6.验证Redis是否启动 1.7.进入到Redis客户端 1.8. ...

  9. Hadoop单机/伪分布式集群搭建(新手向)

    此文已由作者朱笑笑授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文主要参照官网的安装步骤实现了Hadoop伪分布式集群的搭建,希望能够为初识Hadoop的小伙伴带来借鉴意 ...

最新文章

  1. python采集bandwidth信息
  2. 几种常见的Shell
  3. 两数相加Python解法
  4. 中文导致Mybatis无效的列索引
  5. Spring Cloud 配置中心客户端读取配置
  6. 阿里道延:我对技术架构的理解与架构师角色的思考
  7. oracle mrp mps mds 的table关联,ORACLE中的计划-Forecast/MDS/MPS/MRP(转)
  8. 魔兽世界忘记账号角色服务器,魔兽世界里我知道了他的游戏角色名字怎样查到他的战网通行证...
  9. 汉语转拼音(带音调和多音字识别)
  10. 一个程序员如何给LPL发弹幕加油
  11. java学习资源分享
  12. Japanese(Shift-Jis)的编码范围
  13. 新冠核酸快速检测系统
  14. 架构师多如过江之鲫,但你真的了解架构师这个工种吗?
  15. 揭开 ClickHouse 快的面纱
  16. 很多朋友问我:什么是博客?为什么要博客!
  17. 如何把电脑的文件同步到云盘
  18. 通过API执行AutoCAD命令来
  19. ERP : 反馈与校正行动
  20. C语言实现STL静态链表,先进后出的数据结构-栈 一

热门文章

  1. 【ORACLE 高可用】使用GOLDENGATE 配置Oracle-MySQL的异构复制
  2. TextWatcher() 的用法
  3. 【luogu 2709 / BZOJ 3781】小B的询问
  4. 记录一下在mac上做一个usb linux安装盘
  5. 常见索引结构—B+树
  6. Android Lint 去除重复资源 之 idea探究
  7. Scrapy学习-24-集成elasticsearch
  8. BZOJ3747: [POI2015]Kinoman
  9. 华为机试题【9】-整数分割为2的幂次
  10. nyoj--86--找球号(一)(hashset二分)