2016-07-11 3 views
0

После получения запроса AJAX я хочу дать отзыв пользователю перед тем, как закончится PHP-скрипт, потому что он занимает много времени.Как продолжить сценарий после ответа AJAX пользователю в Yii2?

я подумал, что send() метод yii\web\Response объекта было сделано для того, чтобы я попытался следующие действия внутри контроллера:

Yii::$app->response->format = Response::FORMAT_JSON; 
Yii::$app->response->data = [ 'success' => $someData ]; 
Yii::$app->response->send(); 

// code that takes long 
sleep(5); 

Ответ передается, но после сна в течение 5 секунд.

же повезло с:

ob_start(); 
echo json_encode([ 'success' => $someData ]); 
header('Connection: close'); 
header('Content-Type: application/json'); 
header('Content-Length: '.ob_get_length()); 
ob_end_flush(); 
flush(); 

// code that takes long 
sleep(5); 

У меня не было никакой уверенности в этом последнем коде рабочего внутри действия контроллера, но я его в первый ... Что мне не хватает?

EDIT: Я использую Nginx + PHP_FPM

ответ

0

PHP_FPM имеет fastcgi-finish-request() имеющееся:

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

Yii::$app->response->format = Response::FORMAT_JSON; 
Yii::$app->response->data = [ 'success' => $someData ]; 
Yii::$app->response->send(); 

fastcgi-finish-request(); 

// code that takes long 
sleep(5); 
0

Я думаю, что вы ищете является долго опросом

Здесь прекрасно работаю пример для длительной реализации опроса на PHP + JQuery

https://github.com/panique/php-long-polling

И вот связанная тема с глубоким объяснением различных технологий в th в области (в том числе длительное время опроса) - What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?

Также вы можете посмотреть на этом видео-учебник

https://www.screenr.com/SNH

+0

Благодарим за ответ. Я не совсем уверен, что это то, что я ищу. Мне нужно время, чтобы вникать в эту тему, но я обязательно вернусь. – David

Смежные вопросы