Какой самый простой способ сделать межпроцессное взаимодействие в PHP? - PullRequest
0 голосов
/ 18 ноября 2018

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 18 ноября 2018

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

0 голосов
/ 18 ноября 2018

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

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

Apache ActiveMQ

PHP Stomp

...