Я пытаюсь заставить PHP сказать Apache, чтобы закрыть соединение и, соответственно, освободить рабочий поток. Причина в том, что у меня есть сценарий, который вызывается с запросом клиента и занимает некоторое время для обработки, но ничего не возвращает клиенту, поэтому просто не имеет смысла держать занятый поток. Код настоящее время я использую:Как закрыть поток Apache из PHP?
ignore_user_abort(true);
header('Content-Length: 0');
flush();
ob_end_flush();
header('Connection: Close');
Поскольку я посылаю дополнительный асинхронный запрос к этому скрипту из запроса исходного пользователя, Content-Length: 0
не будет портить ответ запроса клиента.
В любом случае, когда я иду следить за тем, что делает сервер, я вижу, что есть рабочий поток, занятый длительным запросом, который я точно не хочу. Я хочу, чтобы скрипт работал тихо назад, не занимая потоки Apache. Как я могу это сделать?
На самом деле это не многопоточность. Вы можете многопоточно использовать 'pthreads' (не тривиально, как это обычно требует повторной компиляции PHP), и я слышал, что это можно сделать даже в рамках процесса Apache. Или используйте систему очередей, такую как Gearman или Resque. – halfer
Если вы используете общий хостинг, возможно, стоит попробовать ['pfork'] (http://uk3.php.net/manual/en/function.pcntl-fork.php) - здесь не так много вариантов кроме 'cron'. – halfer