我正在使用具有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