Я написал программу на PHP, которая постоянно обновляет базу данных. Я бы хотел, чтобы он выдавал данные во время работы, чтобы другие процессы могли их читать и что-то с ними делать.
Вот что я имею в виду на схеме:
Я понимаю, что для этого мне нужен какой-то межпроцессный обмен (IPC), но я не уверен, какой самый простой способ сделать это в PHP .
Вот два возможных решения, которые я придумал:
<сильный>1. Включите основной процесс на сервер Unix Socket.
Я мог бы добавить некоторый код сокета в основной процесс, чтобы превратить его в сервер сокетов Unix, обрабатывая соединения и записывая в сокет во время его работы. Затем другие процессы могут подключаться и читать данные из сокета:
Однако это означает, что основной программе придется иметь дело как с сервером сокетов, так и с выполнением своей основной работы. Кроме того, PHP не поддерживает многопоточность «из коробки», что несколько усложняет обработку нескольких соединений, и поэтому вся программа становится намного сложнее.
В общем, это не самое простое решение, особенно для программы, написанной на PHP (к сожалению).
<сильный>2. Создайте отдельный сервер Unix Socket.
В качестве альтернативы я мог бы написать отдельную серверную программу Unix Socket, в которую основной процесс может писать, и он будет передавать все записи любому другому процессу, который к нему подключается:
Преимущество этого заключается в отделении ответственности за обслуживание сокетов от основного процесса. Это также сделало бы обработку соединения намного проще, поскольку я мог бы написать его на языке, который лучше подходит для работы в качестве сервера сокетов.
Но, с другой стороны, это означает, что мне нужно будет написать и запустить дополнительную программу, которая поможет мне справиться с межпроцессным взаимодействием.
Есть ли более простое решение?
Вариант 2 пока является моим предпочтительным решением, но может быть, есть какой-то альтернативный метод, который я здесь упустил?
Опять же, я просто хочу, чтобы существующий процесс PHP выдавал некоторые данные во время работы, а другие процессы могли их читать.
Какие есть простые решения для такого рода межпроцессного взаимодействия?