Pracuję nad dość dużą aplikacją internetową, a backend jest głównie w PHP. W kodzie jest kilka miejsc, w których muszę wykonać jakieś zadanie, ale nie chcę, aby użytkownik czekał na wynik. Na przykład podczas tworzenia nowego konta muszę wysłać im powitalną wiadomość e-mail. Ale kiedy klikną przycisk „Zakończ rejestrację”, nie chcę zmuszać ich do czekania, aż wiadomość e-mail zostanie faktycznie wysłana, po prostu chcę rozpocząć proces i od razu zwrócić wiadomość do użytkownika.
Do tej pory w niektórych miejscach używałem czegoś, co wygląda jak hack z exec (). Zasadniczo robienie rzeczy takich jak:
exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");
Co wydaje się działać, ale zastanawiam się, czy istnieje lepszy sposób. Rozważam napisanie systemu, który kolejkowałby zadania w tabeli MySQL, oraz osobnego, długo działającego skryptu PHP, który raz na sekundę odpytuje tę tabelę i wykonuje nowe zadania, które znajdzie. Miałoby to również tę zaletę, że pozwoliłoby mi w przyszłości podzielić zadania między kilka maszyn roboczych, jeśli zajdzie taka potrzeba.
Czy wymyślam koło na nowo? Czy istnieje lepsze rozwiązanie niż hack exec () lub kolejka MySQL?