Сценарий:
У меня есть виртуальный сервер php vagrant и работающий jar-файл, запуск которого занимает несколько минут.
В идеале, когда пользователь идет по определенному маршруту в моем приложении, сервер начнет запускать указанный jar в фоновом режиме, так что пользователю не придется ждать, глядя на пустую страницу, и, когда jar завершит выполнение, страница автоматически обновится. (или данные в нем), предоставляя пользователю информацию, которую он получил от вывода банку.
Проблема:
До сих пор мне удалось запустить jar в фоновом режиме с помощью функции exec (). Я даже могу получить идентификатор процесса и проверить, запущен он или нет.
Проблема, которую я имею, состоит в том, как php (так сказать) быть уведомленным, когда фляга перестает работать, не блокируя нормальное выполнение?
Есть ли способ сделать это? Я искал повсюду — от очередей Laravel до разветвления запущенного процесса, но ничего (как я понял) не отвечало моим потребностям.
РЕДАКТИРОВАТЬ:
Я думаю, что, возможно, нашел решение, но я все равно хотел бы спросить сообщество. Скажем, я использую цикл javascript (с setInterval) после загрузки страницы, и внутри цикла я делаю асинхронный запрос ajax к серверу, спрашивая, завершился ли процесс, и, если да, возвращаю вывод jar и обновление веб-страницы новыми данными.
Это сделало бы очень «вытягивающее» решение вместо предпочтительного «выталкивания», но я даже не знаю, что пуш-подход возможен.
Я все еще учусь программировать для веб-приложения, и поэтому это может быть глупым вопросом, и за это я прошу прощения. Пожалуйста, не стесняйтесь поставить меня на правильный путь, если это решение полностью сходит с рельсов.
Заранее спасибо,
Вы должны взглянуть на библиотеки JS, уже созданные для этой цели, например: NodeJS.
Он сохраняет канал открытым между пользователем и вашим веб-сервером, и вы можете отправить уведомление с сервера конкретному пользователю или группе пользователей.
На самом деле люблю это сам.
Других решений пока нет …