@Tutucu

Как в php отдать JSON ответ и после этого выполнить «долгий» скрипт?

Добрый день. Создаю сервис на PHP и Laravel, в котором используется стороннее API, это самое API вызывается слишком долго (до 10 секунд), у меня же строгие требования вернуть любой JSON ответ не более чем за 3 секунды (это очень строгое условие). Т.к. мой сервис это тоже API, который возвращает только JSON возможности использовать JS на клиенте нети.
Мне нужно за эти 3 секунды отдать json заглушку с ответом типа "Ваши данные готовятся, обратитесь повторно через 10 секунд", а в это время запустить другой PHP скрипт который посетит стороннее API, соберёт все нужные данные и подготовит их для следующего уже нормального и целевого запроса.
Как это можно сделать?
  • Вопрос задан
  • 132 просмотра
Решения вопроса 2
kawabanga
@kawabanga
Бью себя по рукам за каждый ответ на глупый вопрос
очереди.

Если совсем по простому, то на запрос api делаете задание, а cron выполняет его на стороне.
Ответ написан
2ord
@2ord
продвинутый чайник
  1. создать уникальный идентификатор задачи
  2. задачу с необходимыми параметрами для её выполнения положить в очередь (message queue)
  3. сразу же вернуть ответ 202 с идентификатором задачи


В отдельном процессе-обработчике брать задачи из очереди и по окончании обработки каждой помечать в БД что выполнена.

Со стороны клиента в JS проше всего выполнять периодическую проверку через полученный ранее идентификатор задачи, обращаясь к веб-приложению, которое проверит статус в БД и вернёт ссылку на страницу, на которую нужно перенаправить.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
1) Запускать консольно скрипт в бэкграунде. имхо бест чойс.
2) Отдавать заголовок окончания соединения и делать дальше все что нужно, тоже норм вариант. Подробнее: линк
3) Очереди - требует дополнительных телодвижений, и если можно решить вышеперечисленными нативными средствами имхо излишне геморно...
Ответ написан
Ваш ответ на вопрос

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

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