cluster模块实现多进程-让我的代理服务速度飞起来了
cluster模块实现多进程
现在的cluster已经可以说完全做到的负载均衡,在做代理服务和http服务器的时候能够讲服务器性能发挥到最大。来看一下具体的实现吧
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; 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);
  var num = 0;
  http.createServer(function (req, res) {
    num++;
    console.log('worker'+cluster.worker.id+":"+num);
    res.end('worker'+cluster.worker.id+',PID:'+process.pid);
  }).listen(3000);
}
分开的写法 ,业务逻辑完全独立出来
加上console.log('Worker #' + cluster.worker.id + ' make a response');这句代码可以打印出是哪个进程处理该请求。
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
  console.log('[master] ' + "start master...");
  for (var i = 0; i < numCPUs; 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) {
  require('app.js');
}
//app.js就是开启具体的业务逻辑了
//app.js具体内容
const net = require('net');
//自动创建socket
const server = net.createServer(function(socket) { //'connection' listener
  socket.on('end', function() {
    console.log('server disconnected');
  });
  socket.on('data', function() {
    socket.end('hello\r\n');
  });
});
//开启端口的监听
server.listen(8124, function() { //'listening' listener
  console.log('working')
});
参考相关文档
https://github.com/aleafs/node-cluster
http://cnodejs.org/topic/4f293a91aa8e490b110214fd
http://blog.fens.me/nodejs-core-cluster/
http://www.cnblogs.com/CodeGuy/archive/2013/05/27/3101312.html
http://blog.chinaunix.net/uid-26983585-id-4035676.html
https://github.com/xk/node-threads-a-gogo
http://www.jianshu.com/p/f8f91ac8d3bc
cluster模块实现多进程-让我的代理服务速度飞起来了的更多相关文章
- Nodejs中cluster模块的多进程共享数据问题
		Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ... 
- 【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)
		[摘要] cluster模块详解 示例代码托管在:http://www.github.com/dashnowords/blogs 阅读本章需要先阅读本系列前两章内容预热一下. 一. 引言 前两篇博文中 ... 
- 【nodejs原理&源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)
		[摘要] 集群管理模块cluster浅析 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 概述 cluster模块是node.js中用于实现和管理 ... 
- 【nodejs原理&源码赏析(4)】深度剖析cluster模块源码与node.js多进程(上)
		目录 一. 概述 二. 线程与进程 三. cluster模块源码解析 3.1 起步 3.2 入口 3.3 主进程模块master.js 3.4 子进程模块child.js 四. 小结 示例代码托管在: ... 
- 【nodejs原理&源码赏析(6)】深度剖析cluster模块源码与node.js多进程(下)
		目录 一. 引言 二.server.listen方法 三.cluster._getServer( )方法 四.跨进程通讯工具方法Utils 五.act:queryServer消息 六.轮询调度Roun ... 
- Node.js的cluster模块——Web后端多进程服务
		众所周知,Node.js是单线程的,一个单独的Node.js进程无法充分利用多核.Node.js从v0.6.0开始,新增cluster模块,让Node.js开发Web服务时,很方便的做到充分利用多核机 ... 
- Nodejs cluster模块深入探究
		由表及里 HTTP服务器用于响应来自客户端的请求,当客户端请求数逐渐增大时服务端的处理机制有多种,如tomcat的多线程.nginx的事件循环等.而对于node而言,由于其也采用事件循环和异步I/O机 ... 
- nodejs cluster模块初探
		大家都知道nodejs是一个单进程单线程的服务器引擎,不管有多么的强大硬件,只能利用到单个CPU进行计算.所以,为了使用多核cpu来提高性能 就有了cluster,让node可以利用多核CPU实现并行 ... 
- nodejs中的子进程,深入解析child_process模块和cluster模块
		Node.js的进程管理 node遵循的是单线程单进程的模式,node的单线程是指js的引擎只有一个实例,且在nodejs的主线程中执行,同时node以事件驱动的方式处理IO等异步操作.node的 ... 
随机推荐
- Android编程中常用的PopupWindow和Dialog对话框
			注意:PopupWindow组件的使用问题,PopupWindow是一个阻塞对话框,如果你直接在Activity创建的方法中显示它,则会报错:android.view.WindowManager$Ba ... 
- Ubuntu添加PPA源
			转自Ubuntu添加PPA源 什么是PPA PPA,表示Personal Package Archives,也就是个人软件包集 很多软件包由于各种原因吧,不能进入官方的Ubuntu软件仓库.为了方便U ... 
- 【形式化方法:VDM++系列】1.前言
			1.前言 今天开始上课学习软件需求分析与VDM++,经过一节课的学习,我又增长了见识. 软件需求工程在软件工程中处于十分核心的地位:需求分析的好坏直接决定软件工程的成败.这一点是我之前对需求工程的理解 ... 
- 如何查看Linux的磁盘空间还有多少
			无论是Linux还是unix,都提供了很多工具来查看磁盘空间的大小. 1. df命令,df命令,可以查看当前文件系统占用的空间的大小,以及剩余的大小,如下例子: Filesystem 1K-b ... 
- UIcollectionView的使用(首页的搭建4)
			2.5 头部视图 
- [wikioi]线段覆盖
			http://wikioi.com/problem/1214/ 这道题也归为贪心了.我也不是很能分辨,但想法确实是:1.有阶段最优化性:2.前一状态和后一状态有关系. 想法:1.排个序是很自然的想法, ... 
- js 中var that=this
			js中经常出现var that=this,为什么这么做? http://stackoverflow.com/questions/4886632/what-does-var-that-this-mean ... 
- [译]GotW #5:Overriding Virtual Functions
			虚函数是一个很基本的特性,但是它们偶尔会隐藏在很微妙的地方,然后等着你.如果你能回答下面的问题,那么你已经完全了解了它,你不太能浪费太多时间去调试类似下面的问题. Problem JG Ques ... 
- asp.net web 开发登录相关操作的控件LoginName、LoginStatus和LoginView控件使用详解
			http://book.51cto.com/art/200909/154039.htm http://book.51cto.com/art/200909/154041.htm ASP.NET提供了一套 ... 
- 【HDOJ】1285 确定比赛名次
			拓扑排序,居然要考虑重边,使用STL实现. #include <iostream> #include <cstdio> #include <cstring> #in ... 
