@j238267431

Как сделать чтобы PHP скрипт по завершении работы отправлял на фронт уведомление?

Добрый день,

Есть долгий скрипт на PHP (выполняет синхронизацию с Tilda) который долго выполняется и клиент не дождавшись ответа выдает 502 ошибку (nginx так настроен - это менять нельзя)
Есть ли возможность без использования websocket отправить сообщение с бэка на фронт о том, что скрипт выполнен?
Ну или может быть отправлять через какое-то время запрос с фронта на бэк и проверять выполнился ли скрипт?
Или например при выполнении скрипта на бэке записывать в базу результат а фронт будет через 5 минут спрашивать бэк все ли готово?
Как лучше сделать подскажите пожалуйста
  • Вопрос задан
  • 187 просмотров
Пригласить эксперта
Ответы на вопрос 2
vabka
@vabka
Токсичный шарпист

Или например при выполнении скрипта на бэке записывать в базу результат а фронт будет через 5 минут спрашивать бэк все ли готово?

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

Я рекомендую всётаки озадачиться вебсокетами, тк это сейчас наиболее стандартный спобом общения клиента с сервером в реальном времени.

Без вебсокетов можно попробовать server sent events, но лично я никогда ихне пробовал и не знаю подводных.
Ответ написан
Комментировать
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Самый простой, элементарный, дуболомный вариант:
раз уж ваш скрипт запускается HTTP-запросом через HTTP-коннект - не давать этому HTTP-коннекту умирать по timeout-у. А значит надо каждые 25 секунд (а лучше каждые 20, да даже каждые 10 секунд) передавать в коннект любые валидные HTML-данные. Самое удобное - строку HTML комментария:
echo("<!-- empty line -->");flush();
Если поверх вывода накручены буфферы - проходить по всем буфферам и принудительно их ob_flush(), что бы строка улетела HTTP-клиенту.

Тогда и PHP, и Nginx, и браузер этот коннект по timeout-у - не закроют. Вуаля, профит!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы