Использование классов PHP в проекте Java - PullRequest
3 голосов
/ 14 сентября 2010

Можно ли каким-то образом использовать некоторые классы PHP, входящие в Zend, в проекте Java?Я хотел бы думать, что всегда есть способ, но как?

Ответы [ 2 ]

5 голосов
/ 14 сентября 2010

Вы можете попробовать использовать Quercus, среду исполнения PHP на основе Java. Кроме этого, вы можете написать веб-сервис на PHP, который вызывается вашим Java-кодом, или PHP-скрипт командной строки, который выполняется Java.

3 голосов
/ 14 сентября 2010

Вопрос, который вы должны сначала задать себе

Сначала задайте себе несколько вопросов, которые помогут вам дать лучший ответ (поскольку программирование часто связано с компромиссами):

  • Можете ли вы запускать код PHP изначально: Если невозможно выполнить PHP-код по умолчанию через (http / CLI), тогда единственным вариантом будет попытка, если Quercus выполнит эту работу.

  • Сколько параллелизма имеет PHP: Давайте предположим, что вы не слишком много называете PHP. Тогда я хотел бы написать простой веб-сервис (см. Ниже), потому что это проще всего реализовать. Если не PHP deamon , который работает в фоновом режиме, ожидает обработки (PHP) для обработки, которую он получает из очереди сообщений Java (deamon), и отправляет сообщение в очередь.

  • Как быстро должен PHP реагировать на Java: Если быстро, то демоном будет путь.

Но я бы сначала посоветовал попытаться реализовать самое простое / быстрое решение и сравнить его. Самое быстрое решение может быть написано за пару минут. Более сложное может занять некоторое время.

Решения:

  • Quercus: Если вы не можете запустить PHP нативно (CLI / HTTP), тогда это ваш единственный вариант.
  • Простой веб-сервис: скажем, вы звоните http://localhost:8181/zend/doZend.php?a=a&b=b из вашей Java-программы. Это будет называть:

    1. doZend функция с параметрами функции a&b из соответствующей службы PHP
    2. возвращает результаты в программу Java, которая называется сервис PHP.
  • именованный канал также может быть быстрым / простым решением, если вы находитесь в * nix. Я предполагаю, что это не будет работать, я думаю, что часть очереди будет работать лучше при высокой нагрузке, но этот легче реализовать.
  • MessageQueue в java / C: написать даемон PHP, который читает из очереди (redis blocking pop pop (* nix) / пишет собственную версию java) и помещает ответ в другую очередь блокировки, из которой ваша Java-программа будет читать ответьте, когда сможете. Этот вариант немного сложно реализовать, но если масштабирование является обязательным, я думаю, что это путь. Часть redis может (если это невозможно скомпилировать) также быть заменена простым Java-демоном, который имеет блокирующую очередь только при желании. Но вариант redis действительно быстрый / стабильный, и я бы действительно согласился с этим.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...