05-07-2012, 03:28 PM
(05-07-2012, 12:22 PM)Argorate a écrit :(05-07-2012, 11:35 AM)oxman a écrit : Et bien Sephi-Chan tu m'étonnes dans le mauvais sens du terme.
Tu réponds exactement à sa question, mais sans lui dire que c'est une très mauvaise façon de faire et de lui donner la bonne.
Donc Argorate, il ne faut pas procéder comme ça, car c'est crade.
Le mieux c'est d'avoir un cron qui tourne toutes les minutes et qui va lire une queue pour savoir les actions à traiter et le fait.
Je ne trouve pas cette méthode pertinente (dans mon cas), au contraire!
Non seulement tu fais un script 59 fois pour rien par heure lorsqu'il n'y a pas de construction, mais en plus c'est pas du temps réel avec un tel système! Un lag d'une minute n'est pas du tout tolérable (pour moi et surtout pour les joueurs^^).
En effet avec un cron toutes les minutes, tu as le risque que le joueurs viennent sur la page, que le cron soit passé une seconde trop tôt et que le bâtiment ne soit pas terminer alors que le joueur devrait le voir fini...
dans un tel cas, je risque de recevoir une montagne de poste sur le forum "Construction bug..." et ils auront raison à mon sens.
Donc c'est bien des taches planifié qu'il me faut.
59 fois par heure il fait rien, pas forcément, mais il se peut qu'il fasse rien du tout très souvent oui.
Mais c'est pas bien grave, il fera quoi ? SELECT * FROM QUEUE et il quitte si il y a rien à faire.
Avec at de toute façon tu as le serveur atd qui tourne en continu non stop, donc bon ça change pas grand chose, là est pas le problème de toute façon.
Il n'y aura pas de lag, car tu ne dois pas te reposer sur la queue ou tout autre système que tu utilises. La queue sert à traiter les informations quand il n'y a personne de présent.
Si le joueur se connecte et va sur sa carte, tu dois checker à ce moment (quelque soit la solution utilisé, at, queue, ou autre) si les bâtiments sont finis ou non et aussi afficher le temps restant en le calculant à ce moment là. Si le bâtiment est finis bah tu affiches qu'il est terminé, donc le joueur ne le verra pas non terminé et tu vires de la queue le fait que le bâtiment était en construction.
De plus tu peux faire ça très simple, tu fais une classe ProcessQueuePlayer, et une classe ProcessQueue, le script qui tourne en cron toutes les 1mn va lancer la classe ProcessQueue pour traiter la queue, pour chaque ligne de joueur qu'elle trouve, elle fait ProcessQueuePlayer pour traiter la queue pour le joueur spécifique.
Du coup, quand le joueur se connecte sur le site, tu lances à chaque fois dans tes pages web la classe ProcessQueuePlayer qui ferait exactement le même traitement que le cron. Enfin à quelques détails près, comme le fait de ne pas envoyer de mail pour alerter de la fin de construction
Si tu utilises at en plus tu vas avoir ce soucis là soulevé par les joueurs :
Pourquoi je reçois un mail qui me dit que la construction est terminé alors que j'étais connecté sur le site et je l'ai vu de mes yeux.