-
Tache automatisée mmorpg
Bonjour tout le monde !
en train de coder un jeu en php/mysql je souhaiterais pouvoir lancer des actions en différée.
en clair, je souhaiterai, quand un joueur lance un combat, pouvoir créer une entrée crontab qui exécuterait un script.php (avec des infos en paramètre comme l'identifiant du joueur.....) dans une heure.
d'ailleurs, pour cette fonction de tache, crontab est-elle la meilleure solution ?
Merci d'avance pour toute votre aide.
-
Salut,
la crontab n'est surement pas la bonne chose à faire non. La crontab c'est pour des actions qui se répètent à intervalles. Ce n'est pas pour différer une action. Tu as un script php qui génère une action qui doit être effectuée 1h plus tard.
- ne peux-tu pas faire l'action immédiatement mais rendre le résultat accessible 1h plus tard ?
> tu enregistres dans une table le résultat et la date à partir de laquelle elle est accessible
- n'as-tu pas un serveur qui tourne en continue et pourrait piocher dans une table les actions à effectuer ?
> avec un script qui tourne toutes les 5mn et réalise les actions en question via un script
> là oui tu as un cron qui tourne toutes les 5mn
-
Salut,
Tu peux regarder du côté de RabbitMQ qui te permet de recevoir les messages de manière programmée. Tu peux l'interfacer en PHP très simplement.
Petit exemple : https://www.rabbitmq.com/blog/2015/0...with-rabbitmq/
-
Ajouter un broker pour ça c'est:
-ajouter de la complexité au niveau de l'app: si tu peux pas garantir la haute dispo, faut gérer les cas ou le broker est down
-ajouter de la complexité de maintenance, faut gérer les mises à jour du broker, sa config, les DLQ
-ajouter une possible faiblesse supplémentaire.
Dans ce cas simple, on a un protocole basé sur un système de requêtes non temps réél, suffit donc de ne fournir la réponse à une requête seulement une fois le temps écoulé, en calculant au besoin le delta entre le temps présent, et le temps d'action prévu.
Si le serveur tourne en temps réél derrière suffit d'avoir un scheduler dans l'appli pour lancer un event au moment opportun.