Выполнение фоновых процессов после веб-запроса

Существует окно 'исключений' в VS2005... пробуют Ctrl + Высокий звук + E при отладке и нажимают на флажок 'Thrown' для исключения, Вы хотите остаться.

5
задан Eduardo 8 December 2009 в 23:15
поделиться

3 ответа

Ну, это зависит от задания, которое вы хотите запустить. Еще один сложный, но более масштабируемый и управляемый подход - использование Gearman для запуска и управления заданиями. Приятно то, что вы можете распределить задания по другим ящикам, чтобы ваш веб-сервер не получал полную загрузку.

Простой подход - использовать exec и nohup , как в

<?php
exec("nohup /usr/bin/php script.php >/dev/null 2>/dev/null &");
?>

Важная часть там состоит в том, чтобы отделить выходные каналы от процесса PHP. Для чтения результата процесса вы можете сохранить его в базе данных.

6
ответ дан 13 December 2019 в 22:09
поделиться

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

Zend Queue - популярный выбор для PHP.

Что касается предлагаемых вами решений, вы не можете быть уверены, что запрос Ajax будет завершен (HTTP не дает никаких гарантий об успехе или неудаче запроса), поэтому, если вы полагаетесь на на работа выполняется. Я видел, как это работает, но это не лучший выбор. Разветвление процесса в конце вашего запроса будет кошмаром производительности.

3
ответ дан 13 December 2019 в 22:09
поделиться

Я не тестировал это, но вот идея.

Используя curl, асинхронно отправьте запрос в newprocess.php (или где угодно, где находится ваш новый скрипт процесса). Вы можете посмотреть на функция curl_post_async в Как мне сделать асинхронный запрос GET в PHP? о том, как сделать такой запрос.

Вы можете выполнить некоторую аутентификацию, чтобы убедиться, что только вы можете запустить newprocess. php ...

1
ответ дан 13 December 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: