GM2mars
@GM2mars

Правильная выдача ответа клиенту и продолжение выполнения кода на PHP?

Встала задача, при ajax запросе выдавать клиенту только необходимые данные и продолжить выполнение php кода уже в фоне. Так как сервер используется Apache, то был реализован следующий код:
ob_start();
echo json_encode($info);     //отдаем клиенту нужные данные
$contentLength=ob_get_length();
header('Connection: close');
header('Content-Length: ' . $contentLength);
ob_end_flush();
ob_flush();
flush();
//продолжаем выполнение

На первый взгляд все работает корректно, сервер молниеносно отдает ответ клиенту и дальше выполняет свою задачу. Но вся проблема в том, что когда мы делаем второй запрос к серверу, мы не получаем ответа, пока не выполнится код из предыдущего запроса.
Я всегда считал что на каждый новый запрос создается отдельный экземпляр php, или я что-то не так понимаю?
Как правильно реализовать данное решение?
  • Вопрос задан
  • 3487 просмотров
Решения вопроса 3
BuriK666
@BuriK666
Компьютерный псих
Закрывайте php сессию session_write_close()
А лучше используйте php-fpm и fastcgi_finish_request
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
на каждый новый запрос создается отдельный экземпляр php

Да, это так.
Если первый не блокирует какие-то необходимые второму ресурсы. Например, сессию.
Ответ написан
Комментировать
FanatPHP
@FanatPHP
Чебуратор тега РНР
session_write_close()

Плюс желательно все-таки закрыть соединение с браузером, см. fastcgi_finish_request(); работает только в фпм.
Но весь код с буфферингом и заголовками надо будет убрать тогда.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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