如何使用群集模块在节点中利用多核系统的优势

时间:2019-03-04 13:26:11

标签: node.js loader

根据我的理解,我从nodejs文档中阅读了集群模块,我们可以使用该模块来利用多核系统 即 我可以轻松处理负载,这意味着在同一端口上使用不同cpu的系统上的命中次数更多

为了确保这一点,我只是在系统上进行了简单的测试

这是我的集群模块代码

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`);
}

这是不聚类的代码

const express = require('express');
let app = express();
const path = require('path');

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') 
})  

我只是通过loader.io进行测试,我得到了如下测试结果: 使用集群模块的结果

enter image description here

使用不带集群模块的结果

enter image description here

我没有得到想要的结果 我在使用集群模块时超时24 是的话我的方法是不正确的,那么我该如何在nodejs中利用多核系统的更多优势?或者我错过了任何东西?

1 个答案:

答案 0 :(得分:-1)

尝试

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);
}