Как работает кластеризация node.js?
Я пытаюсь понять следующий фрагмент кода, который используется для создания тысяч серверов, чтобы использовать многоядерный процессор.
var cluster = require("cluster");
var http = require("http");
var numCPUs = require("os").cpus().length;
var port = parseInt(process.argv[2]);
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on("exit", function(worker, code, signal) {
cluster.fork();
});
} else {
http.createServer(function(request, response) {
console.log("Request for: " + request.url);
response.writeHead(200);
response.end("hello world\n");
}).listen(port);
}
У меня вопрос: если каждый созданный сервер прослушивает один и тот же порт, что гарантирует, что запрос не будет обслуживаться более чем одним сервером?
1 ответ
Решение
В узле v0.10 ядро ОС всегда выбирает, какой дочерний элемент получает запрос. В узлах v0.11+ и io.js v1.0.0+ используется ручное циклическое планирование (за исключением Windows на данный момент). Это поведение по умолчанию настраивается путем установки переменной среды.