Как я могу общаться между PHP и Java-программой?

Я работаю над веб-приложением, которое часто требует интенсивного запроса вычисления, результаты которого хранятся в отдельной таблице. Используя MySQL, этот запрос занимает около 500 мс (как можно оптимизировать, поверьте). Чтобы устранить это узкое место, я создал программу Java, которая загружает соответствующие данные БД в память и выполняет сам запрос; это занимает около 8 мс (что-то я немного горжусь). Я хотел бы использовать эту Java-программу для получения результатов, а если она не удалась или недоступна, переход на PHP-запрос на выполнение MySQL-запроса.

Поскольку загрузка данных в Java-приложение занимает некоторое время, он будет загружать его один раз и работать в фоновом режиме. Теперь вопрос в том, как я могу общаться с этим Java-приложением через PHP?

Иметь ввиду:

  • Многим экземплярам PHP может потребоваться одновременная связь с этим Java-процессом.
  • Если экземпляр Java не может быть найден (например: он по какой-то причине сбой), PHP должен развиваться с использованием более старого и медленного метода MySQL.
  • Допустимый промежуточный процесс, такой как Memcache.
  • В идеале решение будет противостоять условиям гонки.
  • Я бы предпочел не использовать MySQL в качестве посредника.

Я собирался использовать Memcache, где PHP писал бы известному ключу и опросу, пока этот ключ не изменится на «завершен», между тем Java проведет опрос этого ключа, и как только он найдет что-то, выполнит задание и установит его в «завершено». Однако это не будет работать по двум причинам. Во-первых, PHP и Java читают / пишут в Memcache, используя сериализованные объекты, и нет возможности изменить это, и я не хочу, чтобы Java не инициализировала объекты PHP и наоборот / наоборот – это слишком грязно. Во-вторых, это не соответствует требованиям ACID – если в очереди будет создана гонка.

На данный момент я застрял в опросе MySQL «выбирает», чтобы узнать, не работает ли задание или нет, что далеко не оптимальное решение, потому что время опроса должно быть медленнее, поэтому MySQL не слишком часто пингируется , Мне нужно лучшее решение!

Благодарю.

Редактировать: Дух. Похоже, что я буду использовать какой-то SocketServer в Java, с которым я не знаком. Пример может помочь 🙂

Solutions Collecting From Web of "Как я могу общаться между PHP и Java-программой?"

Я использую сервер сокетов на конце Java и PHP-сокеты на PHP-конце. Прекрасно работает.

Нет необходимости слишком усложнять работу с мостом PHP / Java, и нет необходимости накладных расходов на создание веб-сервера.

Розетки отлично работают, и мне на самом деле немного стыдно, что я даже задал вопрос, чтобы начать работу.

Мост PHP / Java

Мое предложение – использовать WebServices … Записывать и запускать webservice в Java, а затем запрашивать его в php с помощью функции fe NuSOAP. Это решение имеет еще одно преимущество – ваш веб-сервис можно легко использовать в других приложениях, таких как .NET .NET …

Другой вариант, который может быть проще, если у вас есть небольшое количество методов, – это создать Servlet в Java, который будет принимать параметры как запрос GET.

Оба эти решения строго основаны на веб-интерфейсах, и оба они работают над отдельными потоками, поэтому они гарантируют вам хорошую производительность.