Подключите код PHP к бэкенду Java

Вы не установили правильный дистрибутив Eclipse. Попробуйте установить программу с надписью «Eclipse IDE для разработчиков Java EE».

7
задан ThoaiOnline 21 May 2009 в 08:17
поделиться

9 ответов

Поскольку это связь между двумя отдельными запущенными процессами, «прямой» вызов (как в JNI ) невозможен. Самыми простыми способами сделать такое межпроцессное взаимодействие, вероятно, являются именованные каналы и сетевые сокеты. В обоих случаях вам нужно будет определить протокол связи и реализовать его с обеих сторон. Использование стандартного протокола, такого как XML-RPC, упрощает это, но не является строго необходимым.

9
ответ дан 6 December 2019 в 10:02
поделиться

Обычно существует четыре шаблона для интеграции приложений:

  1. через файловую систему, т.е. один производитель записывает данные в каталог, контролируемый потребителем
  2. через базу данных, т.е. два приложения совместно используют схему или таблицу и используют ее для обмена данными
  3. через RMI / RPC / веб-службу / любую блокировку, синхронизацию вызова от одного приложения к другому. Для PHP на Java вы можете выбрать одну из различных библиотек интеграции, перечисленных выше, или использовать некоторые стандарты веб-служб, такие как SOAP.
  4. через обмен сообщениями / любую неблокирующую асинхронную операцию, когда одно приложение отправляет сообщение другому приложению.

У каждого из этих паттернов есть свои плюсы и минусы, но хорошее практическое правило - выбрать тот, у которого самая слабая связь, которая вам может сойти с рук. Например, если вы выбрали №4, ваше приложение Java может аварийно завершить работу, не отключая также и приложение PHP.

I '

4
ответ дан 6 December 2019 в 10:02
поделиться

Я пробовал мост PHP-Java (php-java-bridge.sourceforge.net/pjb/), и он работает довольно хорошо. По сути, нам нужно запустить файл jar (JavaBridge.jar), который прослушивает порт (доступно несколько вариантов, таких как локальный сокет, порт 8080 и т. Д.). Ваши файлы классов java должны быть доступны для JavaBridge в пути к классам. Вам необходимо включить файл Java.inc в свой php, и вы сможете получить доступ к классам Java.

3
ответ дан 6 December 2019 в 10:02
поделиться

Конечно, есть много способов, но вы сказали об ограниченных ресурсах ...

ИМХО определите свой собственный облегченный протокол, подобный RPC, и используйте сокеты TCP / IP для связи. Собственно в этом случае нет необходимости использовать все преимущества RPC и т. Д. Вам нужно только определить API для этого конкретного случая и реализовать его с обеих сторон. В этом случае вы можете сериализовать свои пакеты до очень маленьких. Вы даже можете назначить своего рода GUID своим удаленным методам и использовать их для экономии трафика и ускорения взаимодействия.

Преимущество использования сокетов в том, что ваше решение будет довольно масштабируемым.

2
ответ дан 6 December 2019 в 10:02
поделиться

Почему бы не использовать веб-службу?

Создайте уровень Java и установите доступ ws (Axis, SpringWS и т. Д.), А Php доступ к Слой Java с использованием одного клиента WS.

Думаю, это просто и полезно.

0
ответ дан 6 December 2019 в 10:02
поделиться

Вы можете попробовать интеграцию PHP / Java .

Кроме того, если связь односторонняя (что-то вроде «sendmail для IM»), вы можете написать отправляйте запросы PHP к файлу и отслеживайте их в своем приложении Java.

1
ответ дан 6 December 2019 в 10:02
поделиться

Извините, это немного быстрый ответ, но: я слышал, что сервер приложений Resin поддерживает интеграцию java и PHP.

Они утверждают, что могут разбить php и java вместе: http://www.caucho.com/resin-3.0/quercus/

Я использовал смолу для обслуживания приложений J2ee, но не для его поддержки PHP.

Мне было бы интересно услышать о таких приключения.

0
ответ дан 6 December 2019 в 10:02
поделиться

Я наткнулся на эту страницу, на которой представлены средства связи двух уровней. Однако для этого по-прежнему требуется средний уровень (TCP / IP). Более того, другие службы также могут использовать службу Java, поскольку она принимает все входящие соединения.

http://www.devx.com/Java/Article/20509

[Исследования ...]

-1
ответ дан 6 December 2019 в 10:02
поделиться

Недавно я тоже столкнулся с этой проблемой. Приведенное выше решение Resin на самом деле является полной переписью PHP на Java по аналогии с JRuby, Jython и Rhino. Он называется Quercus. Но я предполагаю, что для вас, как и для меня, выбросить вашу установку Apache / PHP на самом деле не вариант.

И с Quercus есть еще проблемы: бесплатная версия - GPL, что сложно, если вы мы разрабатываем коммерческое программное обеспечение (хотя и не такое сложное, как хотел бы Ресин (но IANAL)), и, кроме того, бесплатная версия не поддерживает компиляцию в байтовый код, поэтому в основном это интерпретатор, написанный на Java.

В конце концов я решил просто обмениваться простыми сообщениями через HTTP. Я использовал PHP json_encode () / json_decode () и Java ' s json-lib для кодирования сообщений в JSON (простой, текстовый, хорошо соответствует модели данных).

Другой интересный и легкий вариант - заставить Java сгенерировать PHP-код, а затем использовать директиву PHP include () для извлечения его через HTTP и его выполнения. Я не пробовал этого.

Если вас беспокоят фактические HTTP-вызовы (для производительности), ни одно из этих решений не поможет. Все, что я могу сказать, это то, что у меня не было проблем с PHP и Java в одной локальной сети. Я считаю, что это не будет проблемой для подавляющего большинства приложений, если вы будете поддерживать свои RPC-вызовы достаточно четко определенными (что вам действительно следует делать в любом случае).

Другой интересный и легкий вариант - заставить Java сгенерировать PHP-код, а затем использовать директиву PHP include () для извлечения его через HTTP и его выполнения. Я не пробовал этого.

Если вас беспокоят фактические HTTP-вызовы (для производительности), ни одно из этих решений не поможет. Все, что я могу сказать, это то, что у меня не было проблем с PHP и Java в одной локальной сети. Я считаю, что это не будет проблемой для подавляющего большинства приложений, если вы будете поддерживать свои RPC-вызовы достаточно четко определенными (что вам действительно следует делать в любом случае).

Другой интересный и легкий вариант - заставить Java сгенерировать PHP-код, а затем использовать директиву PHP include () для извлечения его по HTTP и его выполнения. Я не пробовал этого.

Если вас беспокоят фактические HTTP-вызовы (для производительности), ни одно из этих решений не поможет. Все, что я могу сказать, это то, что у меня не было проблем с PHP и Java в одной локальной сети. Я считаю, что это не будет проблемой для подавляющего большинства приложений, если вы будете поддерживать свои RPC-вызовы достаточно детализированными (что вам действительно следует делать в любом случае).

Были проблемы с PHP и Java в одной локальной сети. Я считаю, что это не будет проблемой для подавляющего большинства приложений, если вы будете поддерживать свои RPC-вызовы достаточно четко определенными (что вам действительно следует делать в любом случае).

Были проблемы с PHP и Java в одной локальной сети. Я считаю, что это не будет проблемой для подавляющего большинства приложений, если вы будете поддерживать свои RPC-вызовы в определенной степени (что вам действительно следует делать в любом случае).

1
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: