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

最新文章

  1. 电子科技大学第八届ACM趣味程序设计竞赛第四场(正式赛)题解
  2. 让div垂直以及水平居中浏览器窗口
  3. 干货分享:让你分分钟学会 javascript 闭包
  4. eclipse注释模板修改
  5. 怎样获取浏览器上次的会话数据(session)
  6. SQL2005性能分析一些细节功能你是否有用到?(三)
  7. 腾讯SNG电面
  8. CentOS7下搭建hadoop2.7.3完全分布式
  9. zoj 1108 FatMouse's Speed 基础dp
  10. Python把给定的列表转化成二叉树
  11. [bzoj4820][Sdoi2017]硬币游戏
  12. centos搭建ftp服务器
  13. 洛谷P2824 排序
  14. centos 6 切换base源
  15. video 铺满父元素(object-fit: fill;)
  16. 【BZOJ4555】求和(多种解法混合版本)
  17. 探讨后端选型中不同语言及对应的Web框架
  18. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) Problem A - B
  19. 数组方法indexOf &amp; lastIndexOf
  20. Servlet Response 重定向

热门文章

  1. new reader
  2. Portal技术综述
  3. bin(x) 将整数x转换为二进制字符串
  4. jQuery.Validate自定义规程的使用案例
  5. PHP reset() 函数
  6. 查看linux系统的版本
  7. gcc编译常用选项
  8. 在Sublime Text 3中配置编译和运行C++程序
  9. Hadoop2.2编程:新旧API的区别
  10. [Hadoop源码解读](三)MapReduce篇之Job类