Je travaille sur une application web assez volumineuse, et le backend est principalement en PHP. Il y a plusieurs endroits dans le code où je dois effectuer une tâche, mais je ne veux pas que l'utilisateur attende le résultat. Par exemple, lors de la création d'un nouveau compte, je dois leur envoyer un e-mail de bienvenue. Mais quand ils cliquent sur le bouton «Terminer l'enregistrement», je ne veux pas les faire attendre jusqu'à ce que l'e-mail soit réellement envoyé, je veux juste démarrer le processus et renvoyer un message à l'utilisateur tout de suite.
Jusqu'à présent, dans certains endroits, j'ai utilisé ce qui ressemble à un hack avec exec (). En gros, faire des choses comme:
exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");
Ce qui semble fonctionner, mais je me demande s'il existe un meilleur moyen. J'envisage d'écrire un système qui met en file d'attente les tâches dans une table MySQL, et un script PHP séparé de longue durée qui interroge cette table une fois par seconde et exécute toutes les nouvelles tâches qu'il trouve. Cela aurait également l'avantage de me permettre de répartir les tâches entre plusieurs machines de travail à l'avenir si j'en avais besoin.
Est-ce que je réinvente la roue? Existe-t-il une meilleure solution que le hack exec () ou la file d'attente MySQL?