Задать вопрос
Denisov80
@Denisov80
Юный Программист

Как отдать ответ клиенту без ожидания завершения скрипта?

Подскажите как вернуть ответ клиенту без ожидания завершения скрипта PHP?
После ответа клиенту, требуется сделать запрос на другой сервис и сохранить полученные данные в файл,
но запрос к другому сервису занимает много время, и клиенту приходится ждать пока завершится скрипт,
хотя полученные данные клиенту абсолютно не нужны в данном запросе.

Пробуюflush()но не работает никак, много примеров уже пересмотрел, но не получается.

Сервер NGINX
  • Вопрос задан
  • 2021 просмотр
Подписаться 2 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
Решения вопроса 1
очереди. После ответа клиенту ставите задание в очередь. Воркер забирает задание, делает запрос на другой сервис и всё остальное. Это не так сложно, как может показаться.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Vitsliputsli
fastcgi_finish_request
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Кроме очередей, как написал Михаил Ливач есть вариант запуска cli скрипта в отдельном потоке и завершить скрипт.
Ответ написан
Комментировать
function echo_and_close( $str = '' ) {
  ob_start();
  ob_clean();
  echo($str);
  header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
  header('Content-Length: '.ob_get_length());
  header('Connection: close');
  ob_flush(); 
  flush(); 
}

Чтобы работало, нужно отключить (глобально или для данного скрипта) буферизацию и сжатие, т.е. устновить параметры:
php_value output_buffering 0
SetEnv no-gzip 1
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы