Node.js 如何验证集群在节点js中工作?
我是nodejs新手,目前正在使用它的功能,我遇到的一个重要功能是集群,我尝试使用expressjs、angular和nodejs为我的示例应用程序实现它 群集代码: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
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