RPC с PHP - не зависит от транспортного механизма - PullRequest
1 голос
/ 22 августа 2010

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

Периодически пользователи будут выдавать запросы на управление рабочими через веб-интерфейс PHP (демон CLI и код интерфейса находятся на одном физическом сервере). Внешний интерфейс должен будет вызывать методы для демона.

Я не понимаю, как обрабатывать эти "удаленные" вызовы методов. Я думал, что использование протокола RPC, такого как JSON-RPC, через стандартный сокет UNIX или TCP было бы целесообразным, но каждая реализация JSON-RPC, XML-RPC, SOAP и т. Д. Для PHP кажется тесно связанной HTTP. Поскольку я не общаюсь через Интернет, HTTP совершенно не нужен.

Итак, два вопроса:

  • Почему большинство пакетов PHP RPC связаны с HTTP?
  • Каков наилучший способ обработки вызовов методов, как описано выше?

Ответы [ 2 ]

1 голос
/ 22 августа 2010

Почему большинство пакетов RPC PHP связаны с HTTP?

Это просто.PHP предназначен для Интернета.Реже писать CLI-приложения на PHP.

Почему большинство пакетов RPC PHP связаны с HTTP?

Чаще всего PHP выполняет RPC для работающих программна другом языке, таком как Java, и там есть хорошие варианты.

Для программы CLI PHP я не знаю ни одного готового решения.Но должна быть возможность реализовать собственное решение с сокетами UNIX.См. расширение сокетов .Обратите внимание, что отсутствие поддержки многопоточности в PHP может сделать это немного сложнее (для обработки нескольких соединений вам придется форкнуть или реализовать свой собственный однопоточный планировщик ...)

0 голосов
/ 16 ноября 2010

Вы все еще можете использовать HTTP и подключаться к локальному хосту, который не будет генерировать сетевой трафик. Я не думаю, что есть какое-то реальное преимущество, которое можно получить при непосредственном использовании сокетов, однако, если вы действительно хотите использовать другой транспортный уровень, вы можете использовать Ripcord (http://ripcord.googlecode.com/), который позволяет вам указать свой собственный класс транспортного уровня. Я автор Ripcord, поэтому могу быть предвзятым.

...