Node.js 如何验证集群在节点js中工作?

Node.js 如何验证集群在节点js中工作?,node.js,Node.js,我是nodejs新手,目前正在使用它的功能,我遇到的一个重要功能是集群,我尝试使用expressjs、angular和nodejs为我的示例应用程序实现它 群集代码: var cluster = require('cluster'); if (cluster.isMaster) { var cpuCount = require('os').cpus().length; for (var i = 0; i < cpuCount; i += 1) { clus

我是nodejs新手,目前正在使用它的功能,我遇到的一个重要功能是集群,我尝试使用expressjs、angular和nodejs为我的示例应用程序实现它

群集代码:

var cluster = require('cluster');

if (cluster.isMaster) {
    var cpuCount = require('os').cpus().length;
    for (var i = 0; i < cpuCount; i += 1) {
        cluster.fork();
    }
} else {
    var express = require('express');
    var app = express();
    var exportRouter=require('./routers/exportRouter');
    var process = require('process');

    fakeDB = [];
    app.use(express.static(__dirname + '/public'));
    app.use(require('./routers/exportRouter.js'));

    console.log('process Id :',process.pid);
    app.listen(3000, function(){
        console.log('running on 30000');    
    });
}
var cluster=require('cluster');
if(cluster.isMaster){
var cpuCount=require('os').cpus().length;
对于(变量i=0;i
我在路由器中添加了以下代码来阻止事件循环,所以当我发出第一个请求时,它将阻止一个nodejs工作进程。所以,如果另一个用户在第一个节点被阻塞时拨打电话,第二个工作人员应该接听

路由器代码:

var express = require('express');
var exportRouter = express.Router();
var process = require('process');

exportRouter.get('/getMe',function(req,res){
    console.log('I am using process   ',process.pid);
    console.log('get is called');
    fakeDB.push(req.query.newName+' '+ process.pid);
    res.send(req.query.newName + ' ' + process.pid);
    console.log('New name received   ',fakeDB);


    console.log('New name received   ',fakeDB);
    var d = new Date().getTime();
    console.log('old ',d)

    var x = d+10000;
    console.log('should stop post ',x);
    while(true){

        var a = new Date().getTime();
        //console.log('new ',a)
         if(x<a){
            break;
         }
    }
    console.log('I am releasing event loop for ',process.pid);

});

module.exports = exportRouter;
var express=require('express');
var exportRouter=express.Router();
var过程=要求(“过程”);
exportRouter.get('/getMe',函数(req,res){
log('我正在使用进程',process.pid);
log('get被调用');
push(req.query.newName+''+process.pid);
res.send(req.query.newName+“”+process.pid);
console.log('newname received',fakeDB);
console.log('newname received',fakeDB);
var d=新日期().getTime();
console.log('old',d)
var x=d+10000;
console.log('should stop post',x);
while(true){
var a=新日期().getTime();
//console.log('new',a)
if(x)
它不使用另一个worker服务其他请求,并等待被阻止的节点worker

您的测试方法可能是错误的。这是您的示例的简化版本

var cluster = require('cluster')
if (cluster.isMaster) {
  var cpuCount = require('os').cpus().length
  for (var i = 0; i < cpuCount; i += 1) {
    cluster.fork()
  }
} else {
  var express = require('express')
  var app = express()
  console.log('process Id:', process.pid)
  app.get('/', function (req, res) {
    console.log('pid', process.pid, 'handler start, blocking CPU')
    var i = 0;
    while (i < 10e9) {
      i++

    }
    console.log('pid', process.pid, 'unblocked, responding')
    res.send('thanks')
  })
  app.listen(3003, function () {
    console.log('running on 3003')
  })
}
pid 53434 handler start, blocking CPU
pid 53437 handler start, blocking CPU
pid 53434 unblocked, responding
pid 53437 unblocked, responding