Node.js 如何利用使用群集模块的节点中的多核系统
我阅读了nodejs文档中的集群模块,根据我的理解,我们可以使用这个模块来利用多核系统 即 我可以很容易地处理负载,这意味着在同一个端口上使用不同cpu的系统上点击次数更多 为了确保这一点,我只是在我的系统上做一个简单的测试 这是我的集群模块代码Node.js 如何利用使用群集模块的节点中的多核系统,node.js,loader,Node.js,Loader,我阅读了nodejs文档中的集群模块,根据我的理解,我们可以使用这个模块来利用多核系统 即 我可以很容易地处理负载,这意味着在同一个端口上使用不同cpu的系统上点击次数更多 为了确保这一点,我只是在我的系统上做一个简单的测试 这是我的集群模块代码 const cluster = require('cluster'); const http = require('http'); const numCPUs = require('os').cpus().length; const express =
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
const express = require('express');
const path = require('path');
const servers = [];
const workers = [];
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
console.log("total no of cpus", numCPUs);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
workers.push(cluster.fork());
workers[i].on('listening', (address) => {
console.log("address", JSON.stringify(address));
});
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
let app = express();
// Workers can share any TCP connection
app.listen(2121, (serverInfo) => {
console.log("server listening at port 2121", JSON.stringify(serverInfo));
})
app.get('/',(req,res,next)=>{
res.json({success:'success'})
})
app.use(express.static(path.join(__dirname)))
app.get('/loaderio-edc7fc83ca1554036ee53a6807d5efb5', (req, res, next) => {
res.sendFile('./loaderio-edc7fc83ca1554036ee53a6807d5efb5.txt')
})
console.log(`Worker ${process.pid} started`);
}
我用loader.io对它进行了测试,测试结果如下:
结果使用集群模块
使用不带群集模块的结果
我没有得到我想要的结果
我在使用集群模块时有24次超时
是否我的方法不正确?如果是,那么我如何在nodejs中利用多核系统的更多优势?或者这里有什么我错过的吗?试试这个
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running in mode: ` + (process.env.NODE_ENV || 'dev'));
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died, restarting!`);
cluster.fork();
});
} else {
app.listen(PORT)
console.log(`worker ${process.pid} started`);
console.log('Listening on port ' + PORT);
}
在我看来,使用集群模块需要很多具体的实现。为此,我建议查看PM2模块
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running in mode: ` + (process.env.NODE_ENV || 'dev'));
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died, restarting!`);
cluster.fork();
});
} else {
app.listen(PORT)
console.log(`worker ${process.pid} started`);
console.log('Listening on port ' + PORT);
}