Я работаю над веб-приложением, которое часто требует интенсивного запроса вычисления, результаты которого хранятся в отдельной таблице. Используя MySQL, этот запрос занимает около 500 мс (как можно оптимизировать, поверьте). Чтобы устранить это узкое место, я создал программу Java, которая загружает соответствующие данные БД в память и выполняет сам запрос; это занимает около 8 мс (что-то я немного горжусь). Я хотел бы использовать эту Java-программу для получения результатов, а если она не удалась или недоступна, переход на PHP-запрос на выполнение MySQL-запроса.
Поскольку загрузка данных в Java-приложение занимает некоторое время, он будет загружать его один раз и работать в фоновом режиме. Теперь вопрос в том, как я могу общаться с этим Java-приложением через PHP?
Иметь ввиду:
Я собирался использовать Memcache, где PHP писал бы известному ключу и опросу, пока этот ключ не изменится на «завершен», между тем Java проведет опрос этого ключа, и как только он найдет что-то, выполнит задание и установит его в «завершено». Однако это не будет работать по двум причинам. Во-первых, PHP и Java читают / пишут в Memcache, используя сериализованные объекты, и нет возможности изменить это, и я не хочу, чтобы Java не инициализировала объекты PHP и наоборот / наоборот – это слишком грязно. Во-вторых, это не соответствует требованиям ACID – если в очереди будет создана гонка.
На данный момент я застрял в опросе MySQL «выбирает», чтобы узнать, не работает ли задание или нет, что далеко не оптимальное решение, потому что время опроса должно быть медленнее, поэтому MySQL не слишком часто пингируется , Мне нужно лучшее решение!
Благодарю.
Редактировать: Дух. Похоже, что я буду использовать какой-то SocketServer в Java, с которым я не знаком. Пример может помочь 🙂
Я использую сервер сокетов на конце Java и PHP-сокеты на PHP-конце. Прекрасно работает.
Нет необходимости слишком усложнять работу с мостом PHP / Java, и нет необходимости накладных расходов на создание веб-сервера.
Розетки отлично работают, и мне на самом деле немного стыдно, что я даже задал вопрос, чтобы начать работу.
Мост PHP / Java
Мое предложение – использовать WebServices … Записывать и запускать webservice в Java, а затем запрашивать его в php с помощью функции fe NuSOAP. Это решение имеет еще одно преимущество – ваш веб-сервис можно легко использовать в других приложениях, таких как .NET .NET …
Другой вариант, который может быть проще, если у вас есть небольшое количество методов, – это создать Servlet в Java, который будет принимать параметры как запрос GET.
Оба эти решения строго основаны на веб-интерфейсах, и оба они работают над отдельными потоками, поэтому они гарантируют вам хорошую производительность.