Если я правильно понимаю, у вас есть (отмеченное предположения):
- обычный веб-приложение PHP, который осуществляет связь по протоколу HTTP (предположительно на Apache или аналогичный веб-сервер)
- интерфейса командной строки приложения затянувшийся PHP, что обменивается данными через websockets.
Предполагается, что оба приложения постоянно получают связь от веб-клиентов. Предположительно, у них также есть свои постоянные хранилища данных, такие как база данных MySQL или аналогичная, возможно, даже совместная с ними.
Я собираюсь предположить, что то, что вам нужно, выходит за рамки каждого приложения, получая доступ к самым современным данным из постоянного хранилища данных (или что эти два процесса используют отдельные хранилища данных), и вам действительно нужно, требуют обмена данными между двумя процессами.
Вы находитесь на правильном пути с очередями сообщений, но, как вы заметили, излишняя сложность заключается в добавлении третьего выделенного уровня взаимодействия между процессами, когда у вас уже есть два уровня коммуникации, которые отлично работают сами по себе.
Что вам нужно, чтобы ваше приложение cli говорило по HTTP, когда ему нужно инициировать общение с вашим веб-приложением, а для вашего веб-приложения - говорить о веб-сокетах, когда ему нужно инициировать общение с вашим приложением cli.
Как это выглядит на практике довольно просто.
В вашем приложении cli просто используйте cURL, чтобы инициировать HTTP-соединение с вашим веб-приложением. Это довольно просто, в Интернете есть бесконечные ресурсы, которые помогут вам на этом пути, и если вы застрянете, то сюда придет новый вопрос, связанный с вашей проблемой, и вы пойдете.Все это требует в вашем веб-приложение выглядит следующим образом:
- соответствующей конечной точки (ы), который приложение кли может посылать запросы, если основной клиент развороте не будет достаточно
- некоторый метод аутентификации консоли приложение, если ему необходимо получить доступ к данным, которые не должны быть доступны веб-клиентам.
Для вашего веб-приложения, чтобы инициировать подключение к веб-соединению с приложением cli, это немного сложнее, потому что я не знаю ни одного родного PHP функциональность, которая специально нацелена на протокол websocket. Тем не менее, я нашел this (extremely permissive) github project, который призван дать вам возможность настроить сервер веб-сокетов, а он also includes a client script, который вы можете использовать для подключения и отправки/получения данных во время процесса вашего веб-приложения, а затем отключите его, когда вы «Сделано. По-видимому, он по-прежнему обладает минимальной активностью, вы можете использовать это напрямую или использовать его в качестве отправной точки для написания своего собственного клиента websocket.
В этом случае, как и в обратной ситуации, клиенту cli необходимо распознать и аутентифицировать трафик от вашего веб-клиента, чтобы он мог обслуживать соответствующие данные именно для него.
Если по какой-либо причине этот сценарий не сработает для вас, вы вернетесь в очереди сообщений или в хранилища общих данных (кто-то предложил redis, который может действовать как гибридное хранилище данных/очередь сообщений при некоторых обстоятельствах).
Каждый запрос к вашему приложению запускает новый поток на сервере. CLI делает то же самое. Темы в PHP никогда не делят ничего. Для обеспечения связи вам нужна система обмена сообщениями. Таким образом, вы на правильном пути. – colburton
Я не совсем уверен, понимаю ли я, сколько процессов выполняется здесь. В основном, вы запускаете один экземпляр PHP-процесса (отредактируйте http-сервер) и $ cliApp WITHIN? или есть несколько случаев появления php здесь? – Method
@Method Я просто использую React Event Loop & Ratchet Websockets. HTTP-запрос поступает с другой структурой, то есть с использованием компонентов symfony/silex. – kishanio