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