flush()но не работает никак, много примеров уже пересмотрел, но не получается.
рекомендуется пользоваться этим с осторожностью, каждый оставленный запущенным такой процесс будет занимать воркер веб сервера, считается говнокодом, но да, решает задачу буквально как поставлено автором вопроса и вполне подходит, если к примеру единственный кто вызывает скрипт - это ты же, т.е. контролируешь частоту запросов.
да я не против, я сам такие решения генерирую, говнокод это не повод для расстройства, просто нужно это держать в голове
простота решения - плюс
скрытые проблемы - минус (не каждый сразу поймет почему сервер перегружен зависшими процессами)
Скрытых проблем здесь нет,
Видишь суслика?
— Нет.
— И я не вижу. А он есть!
Поддержу коллегу rPman, он верно заметил, что это так себе решение. Все может лечь гораздо раньше чем мы куда либо упремся. Мы не освобождаем поток, а их количество конечно и определено в конфиге, например сколько раз надо нажать F5 на этой волшебной странице, чтобы уронить полностью весь сайт ?
говнокод это не повод для расстройства, просто нужно это держать в голове
простота решения - плюс
скрытые проблемы - минус (не каждый сразу поймет почему сервер перегружен зависшими процессами)
подключим брокер-очередей, будем писать в очередь и контролировать ее, будем разбирать очередь отдельным демоном, да еще и в асинхронном режиме на пыхе.
Вам же захотелось технических деталей. Вы получили. Ну теперь потрудитесь привести доводы, почему Вы топите за решение имеющее проблему: при использовании fastcgi_finish_request для того чтобы уронить сайт не надо жмакать F5 достаточно просто по нему шарится, ведь теперь клиент не ожидает завершения потока, а порождает новые в процессе навигации.
fastcgi_finish_request перед долгим запросом к стороннему серверу - говнокод.
cron, php-cli, таблица заданий в БД - элементарная задача для юного погромиста, куча примеров в интернете. FPM не лезет - сайт жив.
Дальнейший разбор, как и гадания не имели смысла. Абсолютно не имеет значения какой конфиг VPS и сколько памяти. fastcgi_finish_request путь к падению сайта в целом с HTTP 502 . Можно, но не оптимально.
ТС нужно решение проблемы долгой отдачи страницы пользователю. Ваше не решает, а маскирует ее. В частных случаях оно может вполне оправдано, но вот в общем случае - это плохое решение.
Напомню Вам с чего началось обсуждение: с комментария рекомендуется пользоваться этим с осторожностью Вы же утверждаете, что осторожность тут излишняя.
ТС для решения задачи надо внести изменения в свой код. Какие ? Тут есть варианты, и в известных исходных условиях fastcgi_finish_request бомба которая может разнести (постоянно ронять) его сайт. Если это не говнокод, то что это ?
Маскирует значит. А когда мы задачу убрали из fpm в "очередь" и оно завалится гдето в базе или гдето в кроновой задаче, это не маскировали?
Вы реально не понимаете в чем проблема fpm с долгим временем исполнения? Вот это, на мой взгляд, очень опасная привычка для разработчика.
Мы вообще не знаем, что ТС делает с этим файлом дальше. Есть вопрос - есть рабочий вариант решения. Если что-то пойдёт не так - спросит ещё, это нормально.
...
Не нравится тебе - ок, но не надо делать вид, что всё остальное автоматически "плохо".
Никто не предлагал копировать говнокод, это ты сам придумал. Юный погромист - не значит идиот, схема cron+таблица - простая и распространённая практика.
Пугалка про "таблица разрастётся и всё ляжет" - из воздуха. Записи чистятся, задания берутся пачками, никаких трагедий. А вот твой fastcgi_finish_request - как раз путь к 502, пляскам с fpm и серверной оптимизацией, что для новичка сложнее в разы..
Если fpm-воркеров 20 штук, то за 1 сек они выполнят 20 1-секундных заданий, а ваша схема за 1 секунду сделает только 1/20 часть этой работы. Т.е. результат немного предсказуем.
"пляскам с fpm и серверной оптимизацией" - это одно число в конфиге, и не факт что вообще чтото нужно менять, если прочитать сравнение выше.

Бинго, Вы показали верхушку айсберга, если сторонний сервер выдает ответ через 5-10 секунд, тогда что ? Роняем сервер ?
Но и это все мелочи, мы не знаем есть ли у клиента сессия, 50/50 но скорее да чем нет. Сюрприз, клиент ответ то получил, а что будет с его новым запросом ? Надеюсь Вы помните что он будет блокирован пока воркер закончит обработку. Ведь Вы не сообщили ТС, что если у него сессия то он должен еще и session_write_close() вызвать.
А если скрипт что то отправит пользователю после вызоваfastcgi_finish_request ?
Помните/знаете ? Воркер определит что пользователь закрыл соединение, и прервет скрипт. Ведь он так устроен это его одно из основных свойств. Вы же и про ignore_user_abort(true) ничего не указали.
И это все для новичка. Вам коллеги пытаются донести что решение то рабочее, но плохое и использовать надо с осторожностью (имея уже достаточно большой опыт и знания за плечами)
Куда мир катится, я уже и не удивлен, не Вы писали калькулятор ?
Vitsliputsli, Слушай, здесь уже не обсуждение решения, а чистый спор ради спора. Ты перескакиваешь с тезиса на тезис, подменяешь вводные, притягиваешь фантазии про сессии, "20 раз хуже", "запрет cli" - лишь бы продолжать тянуть эристику.
Мы отвечаем по факту вопроса ТС, а не строим гипотетическую Вселенную, где всё ломается ровно там, где тебе удобно для аргумента. Cron+таблица - нормальная и простая схема; fastcgi_finish_request - нормальный инструмент в определённых условиях. Всё.
А дальше начинается только твоё упёртое "докажите мне, что я не прав", и оно вообще никому не надо.
moderator, тут обсуждение решения переросло в эристическую полемику и перестало быть конструктивным
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