Ich arbeite an einer etwas großen Webanwendung und das Backend ist meistens in PHP. Es gibt mehrere Stellen im Code, an denen ich eine Aufgabe ausführen muss, aber ich möchte den Benutzer nicht auf das Ergebnis warten lassen. Wenn ich beispielsweise ein neues Konto erstelle, muss ich ihnen eine Willkommens-E-Mail senden. Wenn sie jedoch auf die Schaltfläche "Registrierung beenden" klicken, möchte ich sie nicht warten lassen, bis die E-Mail tatsächlich gesendet wird. Ich möchte nur den Vorgang starten und sofort eine Nachricht an den Benutzer zurücksenden.
Bis jetzt habe ich an einigen Stellen etwas verwendet, das sich wie ein Hack mit exec () anfühlt. Grundsätzlich Dinge tun wie:
exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");
Was zu funktionieren scheint, aber ich frage mich, ob es einen besseren Weg gibt. Ich denke darüber nach, ein System zu schreiben, das Aufgaben in einer MySQL-Tabelle in die Warteschlange stellt, und ein separates PHP-Skript mit langer Laufzeit, das diese Tabelle einmal pro Sekunde abfragt und alle neu gefundenen Aufgaben ausführt. Dies hätte auch den Vorteil, dass ich die Aufgaben in Zukunft auf mehrere Arbeitsmaschinen aufteilen könnte, wenn dies erforderlich wäre.
Erfinde ich das Rad neu? Gibt es eine bessere Lösung als den exec () - Hack oder die MySQL-Warteschlange?