Рабочие процессы создаются методом child_process.fork, поэтомучто они могут общаться с родителем через IPC и передавать серверные дескрипторы туда и обратно.
Когда вы вызываете server.listen (...) в работнике, он сериализует аргументы и передает запрос главному процессу,Если главный процесс уже имеет прослушивающий сервер, соответствующий требованиям рабочего, он передает дескриптор работнику.Если у него еще нет прослушивающего сервера, соответствующего этому требованию, он создаст его и передаст дескриптор работнику.
Это может привести к неожиданному поведению в трех крайних случаях:
server.listen ({fd: 7}) - поскольку сообщение передается мастеру, дескриптор файла 7 в родительском файле будет прослушиваться, а дескриптор передается работнику, а не прослушивать представление работника о том, что число 7ссылки на дескриптор файла.
server.listen (handle) - явное прослушивание дескрипторов заставит работника использовать предоставленный дескриптор, а не общаться с главным процессом.Если рабочий уже имеет дескриптор, то предполагается, что вы знаете, что делаете.
server.listen (0) - Обычно это приводит к тому, что серверы прослушивают случайный порт.Однако в кластере каждый работник будет получать один и тот же «случайный» порт каждый раз, когда они слушают (0).По сути, порт является случайным в первый раз, но предсказуемым впоследствии.Если вы хотите прослушивать уникальный порт, сгенерируйте номер порта на основе идентификатора работника кластера.
Когда все процессы принимают () на одном и том же базовом ресурсе, балансировка нагрузки операционной системы между нимиочень эффективно.В Node.js или в вашей программе нет логики маршрутизации и нет общего состояния между работниками.Поэтому важно спроектировать вашу программу так, чтобы она не слишком сильно зависела от объектов данных в памяти для таких вещей, как сеансы и вход в систему.
Поскольку все рабочие процессы - это отдельные процессы, их можно уничтожить или повторнопорождается в зависимости от потребностей вашей программы, не затрагивая других работников.Пока некоторые работники еще живы, сервер будет продолжать принимать соединения.Однако Node не может автоматически управлять количеством работников для вас.Вы несете ответственность за управление рабочим пулом для нужд вашего приложения.