我正在使用具有node.js的集群模块从多个cpu核心(我的情况是4)中受益。问题是,如果工作人员忙,下一个请求仅在大约10秒后被委派给另一个可用工作者,这是不可接受的。我使用无限循环来测试群集如下:节点js - 请求委托之前的集群延迟
var cluster = require ('cluster');
if (cluster.isMaster) {
var cpuCount = require('os').cpus().length;
for (var i = 0; i < cpuCount-1; ++i) {
cluster.fork();
}
} else {
var express = require('express');
var app = express();
app.get('/', function (req, res) {
console.log('Served by worker %d!', cluster.worker.id);
while(true) {}
console.log("done");
res.status(200).send();
});
app.listen(8080, function() {
console.log('Worker %d running!', cluster.worker.id);
});
}
cluster.on('exit', function (worker) {
console.log('Worker %d died :(', worker.id);
cluster.fork();
});
起初我打开本地主机:在浏览器8080和日志信息“由工人1先得”瞬间打印。然后,我在新标签中打开相同的页面,并且仅在10秒后打印“由工作人员2提供”。为什么会这样,我如何将请求立即委托给可用的工作人员?
我的猜测是'cluster'依靠主进程和子进程能够相互通信。如果您完全用无限循环阻止子进程,则该通信将被有效阻止。 – robertklep