Запускать задачу PHP асинхронно

Я работаю над довольно большим веб-приложением, а бэкэнд в основном на PHP. В коде есть несколько мест, где мне нужно выполнить какую-то задачу, но я не хочу заставлять пользователя ждать результата. Например, при создании новой учетной записи мне нужно отправить им приветственное письмо. Но когда они нажимают кнопку «Завершить регистрацию», я не хочу заставлять их ждать, пока письмо действительно не будет отправлено, я просто хочу начать процесс и сразу же вернуть сообщение пользователю.

До сих пор в некоторых местах я использовал то, что похоже на хак с exec (). В основном делать такие вещи, как:

exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");

Который, кажется, работает, но мне интересно, есть ли лучший способ. Я рассматриваю возможность написания системы, которая ставит задачи в очередь в таблице MySQL, и отдельного долгосрочного скрипта PHP, который запрашивает эту таблицу раз в секунду и выполняет любые новые задачи, которые он находит. Это также имело бы преимущество, позволяя мне распределять задачи между несколькими рабочими машинами в будущем, если бы мне это было нужно.

Я заново изобретаю колесо? Есть ли лучшее решение, чем взлом exec () или очередь MySQL?

Ответы на вопрос(15)

Ваш ответ на вопрос