Принцип работы

Мастер-процесс

Мастер-процесс - это основной процесс, который начинает работу, как только вы запускаете Localzet Server и выполняет всю процедуру запуска. Он не участвует в обработке запросов, а служит лишь для поддержания стабильности, мониторинга и управления дочерними процессами.

  1. Проверка среды - перед началом работы процесс должен убедиться, что он запущен из терминала и система соответствует минимальным требованиям.
  2. Демонизация - здесь процесс переходит в фоновый режим (daemon).
  3. Установка сигналов - так процесс, выполняемый в Unix-подобной системе, сообщает самой ОС о том, какие сигналы POSIX может принимать и устанавливает обработчики.
  4. Создание сокета - на этом этапе процесс создаёт слушающий сокет с параметрами, которые вы передали серверу ($socketName и $socketContext).
  5. Создание форков - т.к. сам мастер-процесс не принимает соединения, этим занимаются дочерние процессы (форки).
  6. Мониторинг сигналов - последним этапом запуска является переход в режим мониторинга и обработки входящих POSIX-сигналов для управления форками.

Логика рабочего процесса

Рабочие процессы - это дочерние процессы, которые обрабатывают входящие соединения и выполняют основную логику вашего приложения. Каждый такой процесс работает независимо и может обслуживать сотни тысяч входящих соединений.

  1. Epoll слушает события - при новом входящем событии Epoll решает, какому сокету его передать.
  2. Логическая обработка - после получения запроса процесс передаёт его обработчикам протоколов транспортного и прикладного уровней, а после - вашему обработчику.
  3. Возврат ответа - после выполнения основной логики приложения, клиенту возвращается ответ, посредством ранее определённых протоколов.
  4. Обратная связь - в конечном итоге процесс возвращается к исходному состоянию для принятия новых соединений.

Сигналы POSIX


Сигналы POSIX - это асинхронное уведомление процесса о каком-либо событии, один из основных способов взаимодействия между процессами в Unix-подобных системах. По умолчанию, при получении сигнала, операционная система прерывает выполнение процесса, если процессом не задан обработчик соответствующего сигнала.

В Localzet Server предустановлены обработчики сигналов SIGINT, SIGTERM, SIGHUP, SIGTSTP, SIGQUIT, SIGUSR1, SIGUSR2, SIGIOT и SIGIO. На схеме наглядно показаны сигналы и действия, к которым они приведут при взаимодействии с процессом сервера.

SIGQUIT и SIGUSR2 отвечают за, так называемую, "плавную" остановку и перезагрузку. Плавность здесь - это процесс закрытия всех соединений перед остановкой или перезагрузкой сервера. Так сервер сообщит клиентам, что выключается, а не грубо оборвёт соединения.