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



Daemon, Cron, Tâche différée, toussa toussa - Anot - 01-11-2016

Bonjour à tous,

Etant "newbie" dans le monde du développement informatique je me confronte a des problèmes qui peuvent paraître simple pour ceux qui sont rompu à ces méthodes, en l’occurrence et pour mon jeux de Gestion/Stratégie en temps réel, j'ai besoin d'utiliser "quelque chose" qui s'occuperait des "Constructions, démolitions, attaque, espionnage" à chaque secondes (Exemple: Je lance une attaque qui tapera dans 00:01:00 et qui sera de retour dans 00:02:00).

Alors en cherchant sur google j'ai découvert dans un premier temps "Cron" (Il est d'ailleurs implémenter dans mon hébergeur), mais même si "Cron" est adapté à certaines choses dont j'ai également besoin (Un classement Mis à jour toute les heures[ou moins] automatiquement, par exemple) j'ai l’impression que mon problème nécéssite un programme de fond qui vérifie chaque seconde ce qui doit être fait

C'est la que je crois qu'un "Daemon" pourrait m'intéresser, mais je ne sais pas par ou commencer ? (J'ai trouver énormément de liens qui explique comment en créer).

Mon idée "vague" c'est que lorsque le joueur lance une des opérations qui demande du temps différée, On crée une requête SQL que l'on stockerait dans la BDD avec une "date d'éxécution", ensuite le "Daemon" travaille directement avec la BDD, indépendamment de l'utilisateur, et vérifie chaque seconde ce qui doit être exécuté et si oui il le fait, si non il attend la seconde suivant. Du coup je ne sais pas trop par ou commencer je préfére pas traîner à faire ça car mon site avançant plutôt bien, le Daemon une fois en place les grosses mécaniques seront terminer.

Voila, je sais qu'il y a pas mal de sujets à ce propos sur le net et même quelques un ici, mais j'ai besoin qu'on me mette un pied à l'étrier, j'ai bien compris l’intérêt et l’utiliter d'un programme en tâche de fond(Et les exemples semblent "simple") mais j'ai pas bien compris comment m'y prendre !!

PS: Les liens intéressants que j'ai trouver, un Sujet rêcent en anglais et quelque chose de plus vieux en français datant de 2007 !
PS2: Sinon la commande "At" ne suffirait elle pas à mon problème de tache ponctuel différée ?


Excusez moi si j'ai loupé un sujet qui en parle explicitement  j'irais le lire au besoin :-D


RE: Daemon, Cron, Tâche différée, toussa toussa - Xenos - 01-11-2016

Citation : qui s'occuperait des "Constructions, démolitions, attaque, espionnage" à chaque secondes
https://toile.reinom.com/la-mauvaise-idee-des-taches-cron-a-la-seconde/

A mon avis, à moins d'avoir un jeu démentiellement joué par 100.000 personnes, t'as juste à exécuter les actions lorsque le joueur visite une page / fait une requête impliquant cette action. Y'a pas à s'emmerder à faire un daemon pour ça.


RE: Daemon, Cron, Tâche différée, toussa toussa - Anot - 01-11-2016

(01-11-2016, 01:22 PM)Xenos a écrit :
Citation : qui s'occuperait des "Constructions, démolitions, attaque, espionnage" à chaque secondes
https://toile.reinom.com/la-mauvaise-idee-des-taches-cron-a-la-seconde/

A mon avis, à moins d'avoir un jeu démentiellement joué par 100.000 personnes, t'as juste à exécuter les actions lorsque le joueur visite une page / fait une requête impliquant cette action. Y'a pas à s'emmerder à faire un daemon pour ça.

Oui mais du coup si l'action doit se terminer à 17h00:01 mais que le joueur se connecte qu'à 17h 10 par exemple, il risque d'y avoir des problèmes non ?^^
Je vais allez lire l'article de suite merci


RE: Daemon, Cron, Tâche différée, toussa toussa - Sephi-Chan - 01-11-2016

Si tu bosses en PHP, regarde du côté de PHP Resque et PHP Resque schedulder. Ils fonctionnent ensemble : le premier permet d'exécuter des tâches de fond insérées dans une file, le deuxième permet de contrôler à quel moment ces tâches sont mises en file. Ça utilise Redis, il te faudra donc un serveur dédié pour t'en servir.

Il faut bien sélectionner les utilisations que tu en fais, comme l'indique l'article de Xenos. Mais là, seule une étude minutieuse de tes cas d'utilisation permettra de choisir la meilleure solution. Il faut donc que tu exposes en détail les mécanismes à implémenter si tu veux nos conseils là-dessus.


RE: Daemon, Cron, Tâche différée, toussa toussa - Anot - 01-11-2016

(01-11-2016, 03:11 PM)Sephi-Chan a écrit : Si tu bosses en PHP, regarde du côté de PHP Resque et PHP Resque schedulder. Ils fonctionnent ensemble : le premier permet d'exécuter des tâches de fond insérées dans une file, le deuxième permet de contrôler à quel moment ces tâches sont mises en file. Ça utilise Redis, il te faudra donc un serveur dédié pour t'en servir.

Il faut bien sélectionner les utilisations que tu en fais, comme l'indique l'article de Xenos. Mais là, seule une étude minutieuse de tes cas d'utilisation permettra de choisir la meilleure solution. Il faut donc que tu exposes en détail les mécanismes à implémenter si tu veux nos conseils là-dessus.



Excusez moi j'ai pas assez détailler ;
Alors les mécaniques du jeux permettent, par exemple, d'attaquer un village sur la carte (Une carte avec des coordonnées toute bête x/y), il y aura donc un certain temps alors imaginons ce temps(Ca depend de la distance et du type d'unités qui attaque) à 00h01m08s de distance, en fait j'aimerais que lorsque le joueur décide d'attaqué, on place dans la BDD les coordonnées de l'attaquant et de l'attaqué, le type d'unités et leurs quantité, la date d'envoi a la seconde près et la date d'arrivée a la seconde près, ensuite on émule sur la page de l'utilisateur et via JavaScript/php les décomptes mais pour que l'action se fasse j'aimerais avoir une idée précise de la méthode (Et Daemons me semblait super)

A savoir que dans ce type de jeux, l'action doit être très précise car on peut décider de "caler" des attaques entre elle et ou de la défense et ou de l'espionnage etc, sachant que dans d'autre jeux similaire on peut même faire des milliers de fake (même à peu de joueurs).
Pour les batiments c'est la même problématique car si jamais une attaque détruit un batiment j'ai peur que ça entre en conflit avec la création d'un niveau de batiment.

Pour la génération de ressource, par contre, l'article de Xenos semblent exactement ce qu'il faut !!

Alors du coup la solution que j'avais penser semble peut-être pas si cool .. ! Je vais lire les articles que tu as mis j'ai d'ailleurs trouver un clone site d'un jeux qui ressemble a ce que je veux faire, je vais "analyser" voir si je trouve un daemons ou sinon leurs méthodes.

Merci ! ^^


RE: Daemon, Cron, Tâche différée, toussa toussa - Xenos - 01-11-2016

Citation :ui mais du coup si l'action doit se terminer à 17h00:01 mais que le joueur se connecte qu'à 17h 10 par exemple, il risque d'y avoir des problèmes non ?

Non, car le principe consiste à ne pas tenir compte du moment réel de traitement de l'action (17h), mais uniquement de sa date in-game.

En pratique, ton serveur ne fait rien (pas de démon).
Il reçoit une requête à 17h30 (ou un CRON horaire se lance). Le serveur va alors d'abord ouvrir la BDD, et chercher dedans toutes les actions révolues, mais non encore calculées. Il va alors les calculer, dans l'ordre et en tenant compte de ces dates. Le serveur exécute donc ces actions à 17h30, bien qu'elles devaient avoir lieu avant: ce n'est pas dérangeant, car personne n'était là à 17h02 pour voir si les actions étaient faites.

Par exemple, une attaque doit avoir lieu à 17h01, une autre à 17h12, et une dernière à 17h20. Le joueur vient voir à 17h ce qu'il se passe. Le serveur dit: rien du tout. Le joueur revient alors à 17h30. Le serveur va donc calculer les 3 attaques d'un coup (dans l'ordre), modifier les data en conséquences, puis afficher le bilan au joueur.

Donc, OSEF que l'attaque soit calculée par le serveur à 17h02: ce qui compte, c'est qu'elle a eu l'air d'avoir lieu à 17h02. Le CRON horaire n'est alors là que pour éviter d'avoir une longue stack d'actions en attente qui ralentirait le jeu.
(après, on peut faire une stack globale à tout le serveur de jeu, ce qui est simple, ou faire des stacks différentes par joueur et ne calculer que ce qui va impacter la page qu'on visite, mais là, d'expérience sur Eclerd, c'est ignoble à gérer).


RE: Daemon, Cron, Tâche différée, toussa toussa - Anot - 01-11-2016

(01-11-2016, 04:33 PM)Xenos a écrit :
Citation :ui mais du coup si l'action doit se terminer à 17h00:01 mais que le joueur se connecte qu'à 17h 10 par exemple, il risque d'y avoir des problèmes non ?

Non, car le principe consiste à ne pas tenir compte du moment réel de traitement de l'action (17h), mais uniquement de sa date in-game.

En pratique, ton serveur ne fait rien (pas de démon).
Il reçoit une requête à 17h30 (ou un CRON horaire se lance). Le serveur va alors d'abord ouvrir la BDD, et chercher dedans toutes les actions révolues, mais non encore calculées. Il va alors les calculer, dans l'ordre et en tenant compte de ces dates. Le serveur exécute donc ces actions à 17h30, bien qu'elles devaient avoir lieu avant: ce n'est pas dérangeant, car personne n'était là à 17h02 pour voir si les actions étaient faites.

Par exemple, une attaque doit avoir lieu à 17h01, une autre à 17h12, et une dernière à 17h20. Le joueur vient voir à 17h ce qu'il se passe. Le serveur dit: rien du tout. Le joueur revient alors à 17h30. Le serveur va donc calculer les 3 attaques d'un coup (dans l'ordre), modifier les data en conséquences, puis afficher le bilan au joueur.

Donc, OSEF que l'attaque soit calculée par le serveur à 17h02: ce qui compte, c'est qu'elle a eu l'air d'avoir lieu à 17h02. Le CRON horaire n'est alors là que pour éviter d'avoir une longue stack d'actions en attente qui ralentirait le jeu.
(après, on peut faire une stack globale à tout le serveur de jeu, ce qui est simple, ou faire des stacks différentes par joueur et ne calculer que ce qui va impacter la page qu'on visite, mais là, d'expérience sur Eclerd, c'est ignoble à gérer).

D'accord en fait je crois avoir compris ou tu voulais en venir, de plus on peut toujours utiliser un cron qui s'en occupera si jamais ya personne qui se connecte. Je pense avoir trouver plusieurs solutions je vais essayer toute les possibilités du coup.

Php resque ressemble aussi à la première méthodes que je voulais utiliser, du coup le gros problème d'un Daemon c'est plutôt l'ensemble de ressource utiliser pour peut être pas grand chose. je vais aussi regarde le clone que j'ai, j'ai trouver un sous dossier "Daemons" avec deux fichier PHP (évents et logs) mis j'y comprend rien pour le moment. :-D