Ich benutze Cluster-Modul mit node.js, um von mehreren CPU-Kernen (4 in meinem Fall) zu profitieren. Das Problem ist, dass, wenn ein Mitarbeiter beschäftigt ist, die nächste Anfrage nur nach ungefähr 10 Sekunden an einen anderen verfügbaren Mitarbeiter delegiert wird, was nicht akzeptabel ist. Ich bin eine Endlosschleife mit dem Cluster zu testen, wie folgt:Knoten js - Cluster Verzögerung vor dem Delegieren der Anfrage
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();
});
Zuerst öffne ich localhost: 8080 in Browser, und melden Nachricht „Serviert von worker 1“ wird sofort gedruckt. Dann öffne ich die gleiche Seite in einem neuen Tab, und erst nach 10 Sekunden wird der "Served by worker 2" gedruckt. Warum ist das so, und wie würde ich die Anforderung erhalten, sofort an einen verfügbaren Mitarbeiter delegiert zu werden?
Meine Vermutung ist, dass 'cluster' auf den Master- und Child-Prozess angewiesen ist, um miteinander kommunizieren zu können. Wenn Sie die untergeordneten Prozesse vollständig mit einer Endlosschleife blockieren, wird diese Kommunikation effektiv blockiert. – robertklep