22-08-2012, 07:13 PM
Salut à tous, voilà une question assez ouverte que je pose, qui va surtout relever de la "technique".
Pour gérer diverses actions datées d'un joueur ("construction finissant dans 4 minutes", "mission en cours - fin à 18h", etc...), je stocke habituellement tout en DB.
Ce n'est que lorsqu'un joueur va charger une page que la construction sera effectivement terminée.
Cette solution, et je suis persuadé qu'il y a mieux, me convient à peu près.
Seulement voilà, j'ai en tête un petit projet, dans lequel une ville composée de personnages non-joueur (il y en a plusieurs milliers) évoluent. (Techniquement, il s'agit de faire quelques updates en DB assez régulièrement)
Il y aurait également des évènements qui se lanceraient, de temps à autre, permettant l'arrivée de PNJ méchants, semant le désordre sur le serveur.
Mon ancienne méthode ne colle pas : lorsqu'il est question de rafraîchir une page, le temps de chargement est affreux. (On dépasse les 45 secondes dans les meilleurs cas !)
J'aimerais beaucoup trouver une solution pour automatiser certaines actions en arrière-plan.
Or, je me retrouve confronté à un deuxième problème : comment avertit-on les navigateurs des joueurs que telle ou telle chose a évolué, s'ils n'ont pas changé de page ? Quelque chose du genre : "Hé, y'a 1000 zombies qui viennentattaquer tous les joueurs du serveur !" ... "Il n'en reste plus que 950 maintenant !"
J'ai effectué diverses recherches sur ce forum, j'ai entendu parler de "CRON" essentiellement. Cette solution ne me permettra toujours pas d'avertir les joueurs, mais je crois que pour ça je resterai sur une vieille méthode ajax, qui ne cesse d'envoyer des requêtes pour savoir s'il y a du nouveau ou non. (J'ai entendu parler de méthode alternatives, mais pas assez répandues je crois... Ou alors assez peu supportées par les navigateurs des joueurs. Je peux me tromper à ce sujet !)
Bien que je pense assez bien connaître PHP, la découverte d'un nouvel outil me donne toujours l'impression d'être au pied du mur : n'y a t-il pas d'inconvénient ? Si oui, quels sont-ils ? Existe t-il d'encore meilleures solutions ?
Pour gérer diverses actions datées d'un joueur ("construction finissant dans 4 minutes", "mission en cours - fin à 18h", etc...), je stocke habituellement tout en DB.
Ce n'est que lorsqu'un joueur va charger une page que la construction sera effectivement terminée.
Cette solution, et je suis persuadé qu'il y a mieux, me convient à peu près.
Seulement voilà, j'ai en tête un petit projet, dans lequel une ville composée de personnages non-joueur (il y en a plusieurs milliers) évoluent. (Techniquement, il s'agit de faire quelques updates en DB assez régulièrement)
Il y aurait également des évènements qui se lanceraient, de temps à autre, permettant l'arrivée de PNJ méchants, semant le désordre sur le serveur.
Mon ancienne méthode ne colle pas : lorsqu'il est question de rafraîchir une page, le temps de chargement est affreux. (On dépasse les 45 secondes dans les meilleurs cas !)
J'aimerais beaucoup trouver une solution pour automatiser certaines actions en arrière-plan.
Or, je me retrouve confronté à un deuxième problème : comment avertit-on les navigateurs des joueurs que telle ou telle chose a évolué, s'ils n'ont pas changé de page ? Quelque chose du genre : "Hé, y'a 1000 zombies qui viennentattaquer tous les joueurs du serveur !" ... "Il n'en reste plus que 950 maintenant !"
J'ai effectué diverses recherches sur ce forum, j'ai entendu parler de "CRON" essentiellement. Cette solution ne me permettra toujours pas d'avertir les joueurs, mais je crois que pour ça je resterai sur une vieille méthode ajax, qui ne cesse d'envoyer des requêtes pour savoir s'il y a du nouveau ou non. (J'ai entendu parler de méthode alternatives, mais pas assez répandues je crois... Ou alors assez peu supportées par les navigateurs des joueurs. Je peux me tromper à ce sujet !)
Bien que je pense assez bien connaître PHP, la découverte d'un nouvel outil me donne toujours l'impression d'être au pied du mur : n'y a t-il pas d'inconvénient ? Si oui, quels sont-ils ? Existe t-il d'encore meilleures solutions ?