RPC W / PHP - Agnostic для транспортировки механизма
Вопрос
Для недавнего проекта у меня есть сценарий PHP, работающий в качестве демона на основе CLI. Этот демон будет отвечать за мониторинг / контроль независимых рабочих процессов.
Периодически пользователи будут выпускать запросы на управление работниками через PHP Web Front-End (демон CLI и интерфейсный код находятся на одном физическом сервере). Фронтальный интерфейс должен будет сделать вызовы методов демону.
Я запутался о том, как справиться с этими «удаленными» вызовами метода. Я думал, что использование протокола RPC, такого как JSON-RPC по сравнению с стандартным сокетом Unix или TCP, но каждая реализация JSON-RPC, XML-RPC, SOAP и т. Д. Для PHP, кажется, тесно связана с Http. Поскольку я не общаюсь через Интернет, HTTP совершенно не нужен.
Итак, два вопроса:
- Почему большинство пакетов PHP RPC в сочетании с HTTP?
- Какой лучший способ обрабатывать звонки метода, как описано выше?
Решение
Почему большинство пакетов PHP RPC в сочетании с HTTP?
Это просто. PHP предназначен для веб-сайта. Rarer написать приложения CLI в PHP.
Почему большинство пакетов PHP RPC в сочетании с HTTP?
Уже более распространено, чтобы PHP выполнять RPC на программах, работающих на другом языке, например, Java, и есть хорошие варианты.
Для программы CLI PHP я не знаю о каком-либо предварительном расположенном растворе. Но должно быть возможно реализовать пользовательское решение с сокетами Unix. Увидеть Расширение розетки. Отказ Обратите внимание, что несуществующееся многопоточная опора в PHP может сделать это немного сложнее (для обработки нескольких подключений вам придется вилить или реализовать свой собственный однопоточный планировщик ...)
Другие советы
Вы все еще можете использовать HTTP и подключиться к localhost, который не генерирует никакого сетевого трафика. Я не думаю, что есть какое-либо настоящее преимущество, которое нужно получить, используя розетки напрямую, однако, если вы действительно хотите, чтобы другой транспортный слой, вы можете использовать RIPCORD (http://ripcord.googlecode.com/), который позволяет вам указать свой Собственный транспортный слой класса. Для полного раскрытия я автор RIPCORD, поэтому я могу быть предвзятым.