JeuWeb - Crée ton jeu par navigateur
Crontab - 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 : Crontab (/showthread.php?tid=7586)

Pages : 1 2 3 4


RE: Crontab - Sôbi - 10-02-2016

Oh oh ! Comme toujours, j'aime bien que mes messages fassent réfléchir et discuter mouhahah ! Big Grin
Et j'suis même dans un article du blog de Xenos ! Tongue La classe 8-)

Trêve de plaisanterie.
Comme je le dis, pour le coup des données figurant sur le premier post, c'est un énorme raccourcie pour montrer que le nécessaire finalement. Je n'ai pas besoin de montrer les requêtes avant ou après étant donné que c'était celle-ci des query qui posait problème en soit. Wink
Maintenant, ces constances sont des constantes stockées dans la base de données. Qui sait, demain j'aurais envie que les joueurs reçoivent 2 au lieu de 1 point d'action par heure... Etc...

En passage de la query en PDO je sécuriserais tout de même tout cela. Typage, etc... Wink

(10-02-2016, 10:25 AM)Xenos a écrit :
 LEAST(`pas_restant`+1, '600')

Je prend note, je ne connaissais pas tiens ! x')
De nouvelles choses encore à apprendre Smile

Merci de votre aide et remarque tout de même.
Une revue de code ne fait pas de mal Smile

EDIT : 
En plus de ça, si je devais déjà corriger sur l'actuelle se serait ça alors : 
Code PHP :
<?php 
mysql_query
("UPDATE `players` SET `pas_restant`= LEAST(`pas_restant`+'" . (int)$nbr_pa_heure . "', '" . (int)$nbr_pa . "') WHERE id_player=1");



RE: Crontab - Sôbi - 11-02-2016

Désolé du double post mais j'ai tout de même une question finalement

J'ai vu que l'unité de mesure la plus basse pour un cron est à la minute...

Mais si je veux que mon script se lance toutes les secondes... Comment faire ?
Je me réfère du coup aux procédure stockées ? ou autre moyen ?


RE: Crontab - Xenos - 11-02-2016

Un cron lancé chaque seconde n'est pas un bon design niveau perfs (puisqu'il me semble que cela lancerait un processus chaque seconde...)

Pourquoi ne pas tout simplement faire un démon tournant en continu, avec une boucle infinie et un temps d'attente d'1 seconde dans cette boucle? Au besoin, si t'as peur des crashs, cherche les "démons de démons" qui peuvent exister (en gros, ce serait un démon qui relancerait automatiquement ton démon à toi si ce dernier crash).

En revanche, je ne vois pas le lien avec les procédures stockées, qui ne sont que des fonctions écrites en SQL et réalisant des requêtes SQL. A la limite, peut-être, "l'event scheduler" de MySQL mais je ne suis vraiment pas certain que ce soit adapté à un traitement chaque seconde.


T'as vraiment besoin d'un tel truc d'ailleurs? C'est pas juste une erreur de design du genre "je lance un truc chaque second qui fait des actions si tel autre truc a eu lieu"? Auquel cas, il vaut bien mieux renverser la réflexion (Holywood principle) et faire lancer (ou stacker le lancement) de ton traitement par l'évènement qui est censé le déclancher.


RE: Crontab - Sôbi - 11-02-2016

Wow, ca part loin là ! :o Démon des démons x')
Pfiouuu !

Pour explication, je voulais pas imposer une heure à un joueur pour son inscription.
Par exemple, je dis que le temps pour avoir un point d'action est de 120 secondes (soit 2 minutes).
Par exemple, moi c'est à 8h52 et l'inscrit sa sera 8h53.
Mon point d'action me sera donné à 8h54 et à l'inscrit 8h55.

Cependant, j'ai caché une donnée qui joue un autre facteur joue un rôle : Les secondes à l'inscription ...
Et oui, je suis à 8h 52min 48s. et l'inscrit à 8h 53min 30s.
Mon point d'action me sera alors donné à 8h 54min 48s et à l'inscrit 8h 55min 30s.
D'où la raison de la vérification des points d'actions toutes les secondes ...

Le design est gérer autrement, en ajax donc pas de bile la dessus ...

Tu vois maintenant la problématique ?

Soit j'imposte le temps où l'on donne des points d'actions (genre a 12h et 24h) ou alors je trouve un autre système...


RE: Crontab - Polou - 11-02-2016

Pourquoi tu n'impose pas le point d'action toutes les 2 minutes, simplement ? 10h02, 10h04, ...


RE: Crontab - Xenos - 11-02-2016

Ton approche est mal adaptée à PHP & MySQL. Dans ton cas, il faut un système d'état: tu stockes en BDD l'heure de dernier calcul du joueur (8h52) ainsi que ses points à cette heure-ci. Ensuite, soit coté code PHP (bof bof) soit au sein d'une vue MySQL (mieux je pense), tu fais le calcul points maintenant = [heure actuelle - dernière heure de calcul]*points par seconde. Cela répondra au problème, sans nécessiter d'inutile calculs.

C'est un peu du "codage quantique": tant que personne ne s'est connecté pour voir son nombre de points d'action, qu'en as-tu à faire du nombre exact?!

Un exemple parlant (cas d'école): tu veux l'âge de tes joueurs. Comment tu fais? Est-ce que tu enregistre l'age dans une colonne, et tu l'incrémente chaque année? Ou est-ce que tu sauves la date de naissance du joueur et tu calcules à la volée son âge? Cette deuxième solution est exactement celle qui te faut, et c'est ce que je te propose Wink


RE: Crontab - Sôbi - 11-02-2016

(11-02-2016, 10:23 AM)Polou a écrit : Pourquoi tu n'impose pas le point d'action toutes les 2 minutes, simplement ? 10h02, 10h04, ...

J'aime les difficultés et comme dit plus haut, je ne veux pas trop imposer une heure ou un temps réel.

(11-02-2016, 10:30 AM)Xenos a écrit : Ton approche est mal adaptée à PHP & MySQL. Dans ton cas, il faut un système d'état: tu stockes en BDD l'heure de dernier calcul du joueur (8h52) ainsi que ses points à cette heure-ci. Ensuite, soit coté code PHP (bof bof) soit au sein d'une vue MySQL (mieux je pense), tu fais le calcul points maintenant = [heure actuelle - dernière heure de calcul]*points par seconde. Cela répondra au problème, sans nécessiter d'inutile calculs.
J'aime bien cet approche ! =)
Je vais donc devoir me rediriger vers les VUES pour comprendre cela Smile

( Cela dérange si je fais un double post en cas de question sur ce sujet ? Ou vous préférez un nouveau post d'aide ?)


RE: Crontab - Xenos - 11-02-2016

Là, c'est lié au problème initial, donc un double-post ne pose pas de soucis. Si cela n'était pas lié (genre le post portait sur "comment je lance un cron" alors que le double-post lance la question de "comment je crée ma vue SQL?"), là, mieux vaut 2 topics.

Après, pour éviter le double-post, il y a une astuce: tu copies ton message original (edition rapide => Ctrl+A => Ctrl+C), puis tu fais "répondre", tu colles le message original, tu ajoutes tes nouveautés, tu valides le message et tu supprimes le 1er (celui que t'as copié): comme t'as posté un nouveau message, le topic sera considéré comme nouveau, mais t'auras supprimé le double-post en fusionnant l'ancien avec ce nouveau message.


RE: Crontab - niahoo - 11-02-2016

(11-02-2016, 09:56 AM)Sôbi a écrit : Cependant, j'ai caché une donnée qui joue un autre facteur joue un rôle : Les secondes à l'inscription ...
Et oui, je suis à 8h 52min 48s. et l'inscrit à 8h 53min 30s.
Mon point d'action me sera alors donné à 8h 54min 48s et à l'inscrit 8h 55min 30s.
D'où la raison de la vérification des points d'actions toutes les secondes ...

Le design est gérer autrement, en ajax donc pas de bile la dessus ...

Tu vois maintenant la problématique ?

Soit j'imposte le temps où l'on donne des points d'actions (genre a 12h et 24h) ou alors je trouve un autre système...

Pas compris, en quoi ça pose un problème de ne pas gérer les secondes puisque les points sont toutes les deux minutes ?


RE: Crontab - Sôbi - 11-02-2016

(11-02-2016, 11:50 AM)niahoo a écrit :
(11-02-2016, 09:56 AM)Sôbi a écrit : Cependant, j'ai caché une donnée qui joue un autre facteur joue un rôle : Les secondes à l'inscription ...
Et oui, je suis à 8h 52min 48s. et l'inscrit à 8h 53min 30s.
Mon point d'action me sera alors donné à 8h 54min 48s et à l'inscrit 8h 55min 30s.
D'où la raison de la vérification des points d'actions toutes les secondes ...

Le design est gérer autrement, en ajax donc pas de bile la dessus ...

Tu vois maintenant la problématique ?

Soit j'imposte le temps où l'on donne des points d'actions (genre a 12h et 24h) ou alors je trouve un autre système...

Pas compris, en quoi ça pose un problème de ne pas gérer les secondes puisque les points sont toutes les deux minutes ?

Oui mais les deux minutes sont en fonction de quel "chiffre" ? Se serait à la seconde prêt de l'inscription par exemple.
Ou alors arrondir la seconde à la minute genre le joueur serait inscrit à 8h54 car 8h53m39s par exemple... c'est bien ça où tu veux en venir finalement ?