JeuWeb - Crée ton jeu par navigateur
Comment exécuter des tâches journalières - 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 : Comment exécuter des tâches journalières (/showthread.php?tid=3368)

Pages : 1 2 3


RE: Traitement nocture à passer - Holy - 05-12-2008

J'utilise le même système que Kéké. Sauf que mes actions sont régulières.

Mises à jour tous les 1/4 d'heures, toutes les heures et chaque soir à minuit ^^ Respectivement pour le déplacement de bataillons (par quart d'heure), pour le gain de ressources (par heure), pour les gains de pa (par jour).

Ça marche bien et c'est jamais qu'une simple condition Smile


RE: Traitement nocture à passer - Sephi-Chan - 05-12-2008

Exact, Rygmes. Smile

Ce n'est certes qu'une condition, mais qui est évaluée au chargement de toutes les pages. Plus tu as de joueurs, plus c'est important, alors qu'un cron consomme la même chose quel que soit le nombre de joueurs.


Sephi-Chan


RE: Traitement nocture à passer - keke - 05-12-2008

Sephi,

Tu peux mettre en variable de session la date et heure de prochaine action ... si tu n'as pas d'action à exécuter ^^.Tant que cette date n'est pas franchi, tu t'abstiens de requêter ta base.
J'avoue avoir creusé pas mal la question et ne pas avoir trouvé de faille dans mon raisonnement. Mais comme toujours, je peux me tromper.

Kéké


RE: Traitement nocture à passer - Sephi-Chan - 05-12-2008

Ce n'est pas tant la question d'avoir des failles dans le mécanismes.
On a des outils pour effectuer des tâches à intervalles réguliers, ce serait dommage de ne pas s'en servir puisque c'est plus fiable et ça n'influe pas sur le reste du code source de l'application.


Sephi-Chan, et la clarté, ça n'a pas de prix. À la limite, pour tout le reste, il y a Eurocard/Mastercard…


RE: Traitement nocture à passer - Findel - 05-12-2008

Je suis sur un hébergement mutualisé qui ne propose pas de cron. Déçu de nombreuses fois par les services gratuits (et même payants) de cron distant, j'ai opté pour une autre solution.

L'idée est simple : sur chaque page affichée, j'appelle un tout petit script, qui se charge de regarder dans une table pour voir s'il doit faire un traitement automatique ou non.

Voici une version simplifiée de ce script :

Code :
if ($requete = mysql_query('SELECT idtodo, script FROM todo WHERE date < '.time().' ORDER BY date LIMIT 0,1')) {
    if ($todo = mysql_fetch_assoc($requete)) {
        mysql_query('UPDATE todo SET date = '.(time() +60).' WHERE idtodo = '.$todo['idtodo']);

        if (file_exists(DIRINCLUDE.'todo/'.$todo['script'].'.php')) {
            // lancement de la tache
            include(DIRINCLUDE.'todo/'.$todo['script'].'.php');
        }
        // suppression de la tache traitée
        mysql_query('DELETE FROM todo WHERE idtodo = '.$todo['idtodo']);
    }
}

sachant que j'ai une table "todo" avec 3 champs :
  • idtodo : identifiant
  • script: nom du fichier contenant le script à executer
  • date : timestamp du moment auquel le script doit s'executer

Le seul défaut de cette technique c'est que si personne ne vient sur le site, aucun script ne s'execute... Mais en même temps personne ne voit qu'ils ne se sont pas exécuté puisque personne n'est venu sur le site Smile


RE: Traitement nocture à passer - Sephi-Chan - 05-12-2008

Ouaip, mais le problème de cette technique, c'est qu'elle gâche des ressources en éxecutant 1 ou 2 requêtes supplémentaire par page vue. C'est vite énorme.


Sephi-Chan


RE: Traitement nocture à passer - Holy - 05-12-2008

(05-12-2008, 01:33 PM)Sephi-Chan a écrit : Ouaip, mais le problème de cette technique, c'est qu'elle gâche des ressources en éxecutant 1 ou 2 requêtes supplémentaire par page vue. C'est vite énorme.


Sephi-Chan
Par rapport à ça, je suis d'accord avec toi, si on peut utiliser Cron, autant le faire ^^

D'ailleurs, dès que je pourrai passer en hébergement définitif, je le passerai en crontab.