Я работаю на платформе PHP, которая предоставляет разработчикам некоторые функции, такие как задания cron, события и связи WebSocket, для этого я запускаю три разных демона, написанных на PHP, чтобы администраторы могли отключить определенную функцию. Когда я запускаю их, после fork утилита запуска демона сохраняет PID в моей базе данных, а затем включает PHP-файл демона. Мне нужно, чтобы разработчики могли легко общаться с этими демонами, используя определенный класс PHP. Я видел, что существует много разных способов взаимодействия с процессами, я видел, например, функцию proc_open, но похоже, что она должна запустить новую команду для связи с ней. Я ищу что-то вроде сокетов PHP, но которые позволяют мне открыть сокет для PID и без использования порта (если это возможно), чтобы избежать конфликтов с сокетами других демонов. Какой лучший способ сделать это с нативными инструментами PHP?
Еще одна деталь: эти демоны могут управлять довольно большой нагрузкой соединений, события также распространяются на клиентов через опрос WebSocket или AJAX, поэтому демоны событий и WebSocket обмениваются данными между ними.
Использование подхода, основанного на процессах, и повторное использование одного и того же процесса (предположительно из вашего объяснения) и взаимодействие с ним без использования сокетов будет затруднено. Если вас не беспокоит масштабируемость за пределами сервера, тогда все будет в порядке. Вам нужно будет по крайней мере использовать сокет (сетевой или Unix), затем связать процесс и прослушивать произвольный порт, а также сохранить номер порта или путь Unix в базе данных вместе с PID.
Другой (старомодный вариант) будет использовать Xinetd; Сделайте ваши демоны запущенными и управляемыми xinetd. Здесь вы действительно перемонтируете stdin и stdout, используя сокеты, передав его демону xinetd.
Других решений пока нет …