var http = require('http');
var cluster = require('cluster');
var server = http.createServer();
server.on('request', ...);
server.on('error', ...);
var rand = Math.random();
if (cluster.isMaster){
var i = 4;
while(i--) cluster.fork();
}
else {
console.log(rand);
server.listen(8888);
}
Такой скрипт отрабатывает без ошибок, при запуске я вижу в консоли 4 различных числа. Отсюда напрашивается вопрос, правильно ли я понимаю, что при вызове cluster.fork() происходит следующее:
1. Создается полная копия текущего процесса (он вызывается с точно такими же аргументам и тд, с какими был вызван пользователем изначально). Грубо говоря, как будто пользователь, повторил последнюю команду в консоли.
2. Неким образом дается команда процессу, чтобы тот понял, что поведение модуля cluster внутри кода нужно изменить соотвествующим образом, давая ему понять, что теперь он не в роли мастера. (cluster.isWorker = true, cluster.isMaster = false и т.д.).
В итоге по факту выполняются следующие инструкции.
var http = require('http');
var cluster = require('cluster');
var server = http.createServer();
server.on('request', ...);
server.on('error', ...);
var rand = Math.random();
console.log(rand);
server.listen(8888);
Все ли правильно я понимаю?
То есть вовсе не обязательно оборачивать весь код воркера в
if (cluster.isWorker) { ... }
?