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