JeuWeb - Crée ton jeu par navigateur
Tâche Cron ? - 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 : Tâche Cron ? (/showthread.php?tid=4813)

Pages : 1 2 3 4


Tâche Cron ? - Odawin - 11-05-2010

Salut !

Voilà j'aurais une petite question, pour mon jeu j'aimerais que le joueur gagne X ressources toutes les heures (par exemple) même quand il n'es pas connecté. Après quelques recherche avec mon ami (Google ^^) j'ai vu que ça se faisait via des taches Cron, mais kézako ?? :heuu: Je n'ai jamais vu n'y entendu parler de ça avant, si quelqu'un pouvais m'éclaircir, voir me montrer un peu comment ça marche ça serais sympa ^^


RE: Tache Cron ? - atra27 - 11-05-2010

Probléme récurent ici donc une petite recherche t'apporterai beaucoup:

http://www.jeuweb.org/ressources-quen-pensez-vous-t-6112.html
http://www.jeuweb.org/mise-a-jour-en-temps-reel-t-6154.html
http://www.jeuweb.org/type-et-gestion-de-ressource-t-6054.html

Pas le temps de lire les sujets mais tu trouvera déjà un début de réponse la...

C'est un probléme assez récurent et on trouve pas mal de solutions sur le forum
Tu verra que le cron n'est pas l'unique solution (plus logique, mais pas forcement la plus économe et la plus simple a mettre en place)


RE: Tache Cron ? - Anthor - 11-05-2010

Citation :mais pas forcement la plus économe

Je demande à voir ^^


RE: Tache Cron ? - Argorate - 12-05-2010

Effectivement, je suis dans le même cas, j'ai fini de coder mes pages qui gère tout seul se qu'un cron ferait chaque heure.

Plutôt que de faire un update par heure comme le ferait un cron (totalement idiot a mon sens), je déclenche un scrpit uniquement quand le joueur se connecte par exemple. En calculant le temps qui ai passé depuis sont dernier tour, je sais ainsi combien de points supplémentaires je dois lui rajouter. (du coup j'ai qu'un update là où un cron en aurait fait je ne sais combien)...

En plus tu n'es pas dépendant d'un tiers.
Et en un if() + include de ta page de script, ça te prend une ligne dans ta page de jeu. Smile


RE: Tache Cron ? - Allwise - 12-05-2010

En quoi une tache qui se lance toutes les heures est-elle idiote ?
Pour ma part, je considère l'utilisation des taches cron et / ou d'un script type daemon/serveur qui tourne sur une boucle infinie. Mais ce que je considère comme idiot, c'est justement de déléguer le traitement d'une tache aux internautes. Que l'exécution d'une tache qui devrait être lancée régulièrement -je dis ça parce que le sujet c'est les taches cron - dépende de la navigation des internautes, c'est pas du tout logique. Un internaute peut se retrouver avec une page qui met 3 plombes à charger. Si personne ne se connecte pendant plusieurs jours, aucune exécution n'est possible et la cohérence des données peut alors être compromise.

Tu me diras peut-être "mais non c'est pas possible, y aura toujours quelqu'un sur mon jeu ! Puis si personne se connecte, y a rien à mettre à jour !" C'est peut-être vrai, mais d'un niveau de logique et de conception d'application, ce schéma-là est nul à chier. Alors je comprends qu'il puisse être utilisé par ceux qui n'ont ni la chance d'avoir un dédié, ni envie d'utiliser des sites tiers. Ça n'empêche pas que ça pue Smile


RE: Tache Cron ? - Roworll - 12-05-2010

(12-05-2010, 12:52 PM)Allwise a écrit : C'est peut-être vrai, mais d'un niveau de logique et de conception d'application, ce schéma-là est nul à chier.

Je ne serai pas aussi catégorique.
Disons plutôt que chaque mécanique nécessite une approche différente.

Prenons le cas d'un jeu avec PA en recharge continue (1 PA toutes les heures par exemple). Est-il vraiment nécessaire de recalculer le total de PA de tous les joueurs et ce toutes les heures même si seulement 10% de la population est active ? Pourquoi ne pas se contenter de calculer les PA du joueur qui se connecte ? Un schéma de recalcul de PAs peut se complexifier en fonction de plusieurs facteurs (récupération basée sur une caractéristique ou un état du personnage par exemple).

Autre cas, un jeu de construction avec récupération de ressources et possibilité de les voler. Mieux vaut faire une tâche CRON pour savoir toutes les X minutes si les bâtiments sont terminés et recalculer les ressources disponibles ou faire cette opération quand le joueur se connecte. Et si le joueur vient à espionner/attaquer/voler un autre joueur, on peut réactualiser les effectifs de la cible tout simplement à ce moment là.

Par contre, sur un jeu avec une mécanique de tour par tour, lancer les calculs à la connexion du joueur,c'est idiot et ca risque de prendre un temps fou. Mieux vaut se rabattre sur un bon CRON qui traite tout d'un coup.

Chaque mécanique de jeu demande une solution appropriée.


RE: Tache Cron ? - Sephi-Chan - 12-05-2010

Un gros +1 pour Allwise dans certains cas. Une application développée de manière sérieuse doit utiliser des outils adaptés.


Sephi-Chan, Réinviter la roue, c'est ma grande passion. WebDev Magazine, avec Homard Farouche !


RE: Tache Cron ? - Argorate - 12-05-2010

Au contraire, pour moi c'est logique d'updater des données que quand on en a besoin. tu fais des traitements quand tu en as besoin et de préférence au moment au tu en as besoin (sauf si c'est trop long, mais généralement en un update ou deux c'est casé, comme le dit Roworll, ça dépend du type de jeu).
Mais apriori lancer un cron pour faire un update/heure sur tous les joueurs n'a pas vraiment de sens pour moi...

D'un point de vue logique de conception on pourrait avoir tendance a dire justement : toutes les 1h je met a jour. Mais pour moi la solution "intelligente" c'est de faire uniquement les modifs au bon moment et uniquement des joueurs actifs: calculer uniquement pour les joueurs qui en on besoin et au bon moment, ça évite des requêtes/modif inutile.


RE: Tache Cron ? - garf - 12-05-2010

Pour ma part, le crontab ne parait utile pour :
- la gestion d'évènements IG non instantanés (attaques/constructions/...)
- la gestion de tache administrative (backup/génération de rapport/...)

En tout cas, je préfère déporter certains calculs au moment nécessaires, les calculs sont pas forcement plus compliqué mais il seront moins fréquents.

Pour reprendre, l'exemple de la gestion des ressources :
Entre faire une requete toutes les X minutes ou faire la même requête qu'au moment nécessaire, le choix est vite pris. Mais bon, après chacun est maitre de son code. D'autant plus que si tu utilises un CRON, ca voudrait dire que tu ne produis pas de ressource entre 2 exécutions de requêtes. Ca peut être un choix de game play ^^

Au niveau du serveur, la charge sera moins importante car moins de requêtes , la complexité de la requête ne changeant pas.
Code :
Update MaTable Set qty=qty+2500*X Where id=5
avec X=3600 ou X=2, le temps d'exécution sera le même. Avec cet exemple, tu gagnes environ 1800 requêtes (ce qui n'est pas négligeable).

J'ai pris volontairement une requête simple, mais avec une requête plus compliquée, il faudra peut être faire un benchmark.
Faut il mieux mettre à jour en 1 seule fois toutes les ressources de tous les joueurs toutes les X minutes/heures ou faire à la demande une requête pour mettre à jour les infos pour un seul membre, sachant que plusieurs membres peuvent faire la demande en même temps.

Pour ma part, je ferai la requête au besoin. A la création de l'évènement si on a besoin de savoir la faisabilité de celui-ci, et/ou à l'exécution de celui-ci, si cela à une incidence.

Ex:
Construction d'une unité : Requête avant
Attaque d'une cible : Requête au moment de l'exécution de l'évènement affairant
Construction/Recherche modifiant la productivité : Requêtes avant pour valider la construction/recherche et requête au moment de la réalisation de l'évènement (calcul de la production pendant l'évènement puis mis à jour de l'équation permettant de calculer la production)

Je ne sais pas si je suis clair ou pas, mais bon, c'est ce que je ferai (en tout cas, c'est comme ça que j'y ai réfléchi)


RE: Tache Cron ? - Sephi-Chan - 12-05-2010

Ça dépend clairement du type d'évolution des ressources.

Si les ressources doivent être produite progressivement (presque en temps réel), la tâche Cron ne sert à rien.
Si les ressources sont données par paquet complet (typiquement, un camion est chargé pendant une heure et se décharge d'un coup, avant d'aller se faire charger à nouveau, provoquant un nouveau temps mort d'une heure), la tâche Cron est intéressante.

De même, la tâche Cron sera difficilement applicable et coûteuse en ressources si le type de production est individuel. En gros, si on doit lancer une procédure pour chaque joueur, ça ne vaut pas le coup de faire un Cron.

En gros, pour qu'on puisse t'aider à mettre au point ta solution, il nous faudrait le détail du système que tu cherches à mettre en place.

Les tâches Cron et les décomptes JIT (Just In Time) ne sont que des moyens technique pour implémenter quelque chose. Reste à définir ce quelque chose.


Sephi-Chan