@mir546
creator

Как сделать ответвление php процесса из браузера?

Пользователь вводит данные которые послаются по AJAX на сервер.
Пока серверный скрипт не завершит работу ответ пользователю не придет.

Нужно чтобы серверный скрипт передал ответ, но при этом продолжил работу для небольших(20-40 секунд) дополнительных вычислений.

Cron юзать думал. Но не годится т.к. вычисления должны быть сразу после ввода данных пользователя.
  • Вопрос задан
  • 422 просмотра
Решения вопроса 1
customtema
@customtema
arint.ru
Скрипт может запустить другой скрипт в отдельном потоке.

Например, если php запускает sh
exec($dir . '/scenario.sh > /dev/null 2>&1 &');

Фрагмент "> /dev/null 2>&1 &" заставит запускающий скрипт не ожидать завершения запущенного.

php может запускать и php.

exec('php script.php > /dev/null 2>&1 &');

Кстати, скрипт может генерировать другой скрипт. Если вам понадобятся идеи такого рода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
mourr
@mourr
Passionate JS developer
Перенесите вычисления в отдельный скрипт с ignore_user_abort, и вызывайте его после ввода пользовательских данных. Он будет исполнятся даже когда пользователь закроет браузер, пока не выполнит задачу и не завершится сам
Ответ написан
Комментировать
WEBSOCKET
Ответ написан
Комментировать
@JSmitty
Самый простой вариант - если у вас PHP работает через PHP-FPM (по умолчанию для nginx именно так), то есть вызов fastcgi_finish_request(), который сделает именно то, что вам надо - отдаст ответ веб-серверу, а скрипт благополучно продолжит работать после этого (но в браузер уже ничего нельзя будет отправить).
Ответ написан
Комментировать
@unst
Для решения удачно подойдут очереди, как писали выше. Это что-то вроде крона, который ждет задач для выполнения.

Для пхп удобно заюзать gearman. Удобно создаются задачи, удобно пишется воркер, есть куча примеров.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы