сокеты — Какой самый простой способ сделать межпроцессное взаимодействие в PHP?

Я написал программу на PHP, которая постоянно обновляет базу данных. Я бы хотел это выкладывать данные во время работы, чтобы другие процессы могли их прочитать и делать вещи с этим.

Вот что я имею в виду на диаграмме:

Я понимаю, что я ищу какой-то межпроцессного взаимодействия (IPC) для достижения этой цели, но я не уверен, что Самый простой / простой способ сделать это на PHP.

Вот два возможных решения, которые я придумала:

1. Превратите основной процесс в сервер Unix Socket.

Я мог бы добавить код сокета в основной процесс, чтобы превратить его в сервер сокетов Unix, обрабатывая соединения и записывая данные в сокет во время работы. Затем другие процессы могут подключаться и читать данные из сокета:

Тем не менее, это означает, что главной программе придется иметь дело как с сокет-сервером, так и с основной работой. Кроме того, PHP не поддерживает многопоточность из коробки, что делает обработку нескольких соединений немного сложнее, и поэтому вся программа станет намного более сложной.

В целом, это не кажется самым простым решением, особенно для программы, написанной на PHP (к сожалению).

2. Создайте отдельный сервер Unix Socket.

В качестве альтернативы, я мог бы написать отдельную серверную программу Unix Socket, в которую может писать основной процесс, и она будет передавать все записи любому другому процессу, который подключается к нему:

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

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

Есть ли более простое решение?

Вариант 2 является моим предпочтительным решением, но Есть ли какой-то альтернативный метод, который я могу здесь упустить?

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

Каковы простые решения для такого межпроцессного взаимодействия?

4

Решение

Вы ищете что-то вроде ActiveMQ, это позволит вам «публиковать» ваши данные в очереди, а затем вы можете использовать другие сценарии / процессы в качестве подписчиков этой очереди. По сути, подписчики будут получать данные по мере их появления. Это очень настраиваемый и простой в использовании для целей распространения данных.

Вы также можете использовать такие классы, как PHP Stomp, чтобы упростить реализацию обмена сообщениями.

Apache ActiveMQ

PHP Stomp

1

Другие решения

Похоже, все, что вам нужно, это база данных SQLite 🙂 выкладывать данные в базу данных SQLite, и не использовать транзакции (или сделать ваши транзакции очень недолговечными), и заинтересованные программы читают файл базы данных ~

0

По вопросам рекламы [email protected]