2016-02-01 1 views
0

Я работаю на платформе PHP, которая предоставляет разработчикам некоторые функции, такие как задания cron, события и связь с WebSocket, поскольку я запускаю три разных демона, написанных на PHP, поэтому администраторы могут отключать определенные особенность. Когда я запускаю их, после fork, стартер демона сохраняет PID в моей базе данных, а затем включает в себя файл PHP daemon. Мне нужно разрешить разработчикам легко общаться с этими демонами, используя определенный класс PHP. Я видел, что существует множество разных методов для взаимодействия с процессами, я видел, например, функцию proc_open, но похоже, что для запуска этой команды требуется запустить новую команду. Я ищу что-то вроде сокетов PHP, но которые позволяют мне открывать сокет в PID и без использования порта (если это возможно), чтобы избежать конфликтов с другими сокетами демонов. Каков лучший способ сделать это с помощью собственных инструментов PHP?Межпроцессная коммуникация в PHP

Еще одна деталь: эти демоны могут управлять довольно большой нагрузкой соединений, события распространяются также на клиентов через WebSocket или AJAX-опрос, так что события и между ними соединяются демоны WebSocket.

ответ

0

Использование подхода на основе процесса и повторное использование одного и того же процесса (предположительно из вашего объяснения) и общение с ним без использования сокетов будет затруднено. Если вы не беспокоитесь о масштабируемости за пределами сервера, тогда все будет хорошо. Вам нужно будет хотя бы использовать сокет (сеть или unix), затем сделать процесс привязкой и прослушиванием на случайном порту, а также сохранить номер порта или unix-путь в базе данных вместе с PID.

Другой (старомодный вариант) должен был бы использовать xinetd; заставьте ваших демонов начать и управлять xinetd. Здесь вы действительно перезаписываете stdin и stdout с помощью сокетов, выставляя их на xinetd-демоне.

+0

О масштабируемости теперь платформа работает на одном сервере, но считается, что она масштабируется на нескольких серверах (она использует базу данных Cassandra), но события будут синхронизироваться с использованием WebSocket через обычную сеть TCP. Проблема сокетов заключается в том, что на сервере существует несколько копий этой платформы (которая является своего рода CMS), поэтому я не уверен в количестве активных разных сокетов. Я читал о FIFO, методе, основанном на файле, но я не уверен в количестве подключений, которое он может управлять, и о производительности на машине. – RyanJ