Конфигурация длинного опроса PHP-FPM - PullRequest
0 голосов
/ 19 октября 2018

Допустим, у меня есть следующая конфигурация для php-fpm:

pm = dynamic
pm.start_servers = 10
pm.max_children = 400
pm.min_spare_servers = 8
pm.max_spare_servers = 16
pm.process_idle_timeout = 10s

Давайте также скажем, что у каждого пользователя должен быть бесконечный длинный запрос опроса.Если у меня есть ограничение в 10000 многократных запросов, и у меня есть 10000 пользователей, подключенных к моему веб-сайту, означает ли это, что мой сервер будет зависать вечно?

Другой вопрос: как servers и children связаны с simultaneous requests?Каждый запрос порождает новый процесс?В чем разница между servers и children?Насколько я понимаю, children являются процессами.

PS: Пожалуйста, не предлагайте веб-сокеты или любые другие технологии.

Спасибо.

1 Ответ

0 голосов
/ 19 октября 2018

Когда вы используете PHP-FPM с динамическими процессами (что является значением по умолчанию и рекомендуемым значением), у вас есть эти опции:

; Choose how the process manager will control the number of child processes.
; Possible Values:
;   static  - a fixed number (pm.max_children) of child processes;
;   dynamic - the number of child processes are set dynamically based on the
;             following directives:
;             pm.max_children      - the maximum number of children that can
;                                    be alive at the same time.
;             pm.start_servers     - the number of children created on startup.
;             pm.min_spare_servers - the minimum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is less than this
;                                    number then some children will be created.
;             pm.max_spare_servers - the maximum number of children in 'idle'
;                                    state (waiting to process). If the number
;                                    of 'idle' processes is greater than this
;                                    number then some children will be killed.
; Note: This value is mandatory.

Отвечая на ваш вопрос, сервер и дочерние процессы являются процессами, которые будут реагировать наодин пользователь на процесс.Ваш сервер будет поддерживать максимум 400 одновременных подключений.

Я реализовал множество систем с длинным опросом, который более эффективен и использует меньше ресурсов, чем обновление через некоторый интервал.

Большая проблемаявляется то, что ваш процесс PHP будет использовать всю память вашего сервера, и я настоятельно рекомендую вам искать любую альтернативу.

Одна хорошая альтернатива, которую я использую, это NGiNX HTTP-сервер Push-модуль , и выможет создавать сценарии, которые будут передавать информацию вашим клиентам.Используя этот метод, вы можете масштабировать до тысячи одновременно работающих клиентов, что невозможно сделать напрямую с помощью PHP.

Например, я создал почтовый клиент с демоном, написанным на PHP, который контролирует почтовый ящик пользователя иpush-уведомление о новых электронных письмах с помощью этого модуля NGiNX, а мониторинг файловой системы выполняется с помощью PHP inotify , другими словами, я использую почти 0 системных ресурсов и создаю систему веб-почты с уведомлением в реальном времени и очень низкой сетью ииспользование процессора, которое требует больших вычислительных затрат при использовании только PHP и длинного запроса или при обновлении.

Я знаю, что вам не нужно предложение Websockets, но в зависимости от ваших требований его практически невозможно избежать.

...