JeuWeb - Crée ton jeu par navigateur
pistes pour un monde persistant - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : pistes pour un monde persistant (/showthread.php?tid=4357)

Pages : 1 2


RE: pistes pour un monde persistant - tactac - 25-09-2009

Voici un lien pour l'exécution de scripts "en tâche de fond" pour php :
http://matthieu.developpez.com/execution_periodique/#L6

J'ai testé et ca fonctionne mais cela devrait être approfondi pour connaitre la charge maximale d'évènements à traiter. J'ai donc créé un petit script qui s'exécute toutes les secondes qui a pour rôle de lire depuis une table d'évènements les tâches à traiter (ou qui auraient du l'être si le serveur est à la "bourre").
Pour chaque évènement traité, le script l'efface de la liste et une fois tous traités il se met en veille (usleep()) au plus 1 seconde. En fait, il se met en veille pendant une durée calculée en ôtant le temps mis à traiter les évènements de 1 seconde : ainsi, si le script a mis 40ms pour traiter la file d'attente, alors il va dormir pendant 60ms.

Ca fonctionne sur le papier et en théorie avec un jeu d'essai "laboratoire", mais comme vous je suis curieux de savoir comment ogame et travian par exemple fonctionnent.


@Anthor : la première voie est fonctionnelle si de nombreux joueurs sont connectés, en gros plus on a de joueurs plus on a de chance d'avoir fréquemment le traitement des évènements exécuté, et forcément plus la fréquence de ces traitements est élevée moins il y a à traiter à chaque fois . Penses tu que travian & co utilisent ce système là?


RE: pistes pour un monde persistant - NicoMSEvent - 25-09-2009

je crois que travian et ogame utilisent ce qu'un joueur voit.
Si les données sont à jour -> on ne fait rien (par exemple batiment en construction qui reste en construction -> on ne change pas d'état)
Si les données ne sont plus a jour, on recalcule uniquement ce qu'on voit (pour le joueur lui même et pour les autres joueurs)

ex : batiment contruit il y a deux jours, si personne ne l'a vu depuis qu'il a a fini de se construire
Ajout des ressources en fonction de ce batiment depuis la derniere fois qu'il a été vu (au niveau actuel -1 parce qu'il n'a pas encore été amélioré a ce moment là) de l'heure de la derniere visite jusqu'a l'heure de fin de construction
Ajout des ressources en fonction de ce batiment depuis son heure de fin de construction (au niveau actuel parce qu'il a été amélioré) de l'heure de sa fin d'amélioration jusqu'a heure actuelle.

ça permet de faire en une visite, les mises a jour des deux derniers jours en quelques petites requetes, sans lancer de requete toutes les secondes, ou toutes les heures. (a mon sens beaucoup plus économique en ressource serveur)

Rendre ces calculs asynchrone, je pense que ça a du bon


RE: pistes pour un monde persistant - QuentinC - 25-09-2009

Je pense quand même qu'ogame utilise un script exécuté périodiquement genre toutes les secondes, et je vais vous expliquer pourquoi. J'ai peut-être tout faux.
Du temps que j'y étais (sur ogame), les flottes étaient régulièrement en retard. Je ne sais pas si c'est toujours le cas aujourd'hui, mais à l'époque (il y a environ 2 ans) ça arrivait fréquemment que le retour d'une flotte soit prévu à 20h, l'heure d'arrivée étant calculée et affichée bien avant (dès le décollage), mais qu'elle ne revenait effectivement qu'à 20h30 voire parfois même 21h ou plus. Le truc, c'est que ce genre de retards à l'atterrissage étaient principalement observables aux heures de grande fréquentation (en l'occurence là le pire était entre 18 et 22h avec des pointes de plus d'une heure de retard), et indépendament de l'heure de départ de la flotte. IL n'y avait pratiquement aucun retard pour les flottes qui devaient atterrir le matin par exemple.
C'est pour cette raison que ça me fait penser ça...
A mon sens, si la table des évènements est traitée de manière asynchrone (calcul uniquement lorsque nécessaire), ce problème ne doit techniquement pas pouvoir arriver. Au pire, la page met quelques secondes de plus à se charger. Je me trompe peut-être dans mes réflexions...


RE: pistes pour un monde persistant - Maz - 25-09-2009

Une cron exécuté toutes les seconde, pour moi c'est simplement de la folie, surtout sur un jeu qui comptes autant de joueur qu'ogame, en tout en tout cas, ça donnais un côté réel: plus de traffic, plus de retard.

Alors, Ogame, futur jeu de Role Play?


RE: pistes pour un monde persistant - Argorate - 26-09-2009

Ogame RP? qu'es ce qui faut pas entendre ^^
C'est juste une machine a fric ce "truc"... :p

Mais j'avoue que cron toute les secondes avec tant de joueurs me semble pas très malin...


RE: pistes pour un monde persistant - QuentinC - 27-09-2009

Pas très malin, c'est clair. Mais pour ogame, je ne pensais pas vraiment à un cron, mais plutôt à un programme qui tournerait en permanence en arrière plan.
De toute façon, la fréquence maximum des cron est d'une minute, si je ne m'abuse.