Форум OlegON > Компьютеры и Программное обеспечение > Сеть > Создание сайтов и поисковая оптимизация (SEO)

Асинхронное выполнение PHP без вывода, функция fastcgi_finish_request()

01.04.2020 21:23


14.06.2017 09:42
OlegON
 
Собственно, очень удобная штука, если вы используете, например, php-fpm, то есть возможность "отцепить" клиента и вернуть ему данные, продолжив работать на стороне сервера.

В обычной ситуации как происходит, пришел запрос, клиенту, например, можно вернуть "спасибо", а дальше обработка идет на сервере. Однако, пока весь скрипт не выполнится, клиент ждет, не даст ли ему сервер еще что-то.

Если серверу гарантированно нечего вернуть, то в код можно добавить строку
Код:
fastcgi_finish_request();
которая отцепит клиента, не убивая серверную часть. Очень удобно, если, например, у вас по требованию клиента идет какая-то долгая обработка в базе или отправка почты через тупой почтовик. Все переменные, разумеется, останутся на местах, но некоторые нюансы есть с сессиями. Почитайте, разберитесь, фишка того стоит.
14.06.2017 15:44
twix
 
А если выполняемый скрипт упадёт, не доделав своё дело (луна так сойдётся, или деплоиться какой сервис нужный будет в этот момент)? Пользер не получит варианта с кнопкой "повторить".
Имхо, лучше для таких вещей подойдёт какой-нить MQ. И ответ пользеру вернётся, и задача запустится повторно, если выполнение срипта внезапно прервётся.
14.06.2017 15:47
OlegON
 
Ну, я и говорил, что
Цитата:
OlegON Если серверу гарантированно нечего вернуть
я, например, обработку слитых журналов в это завернул, она достаточно нешустрая, а вероятность "луны" настолько мала, что ею можно принебречь.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.