IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Ré actualisation constante


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Ré actualisation constante
    Bonjour à tous,

    Tout d'abord, je suis assez novice dans le domaine de la programmation, mais je m'attaque à un grand projet (un jeu avec HTML et PHP, comme on en voit tant...).

    Je n'en suis encore qu'à la conception mais je m'attaque à un problème : je vous donne un exemple qui n'est pas la réalité, mais qui permet de comprendre mon dilemme : il est tiré d'un premier essai que j'avais fait, où il s'agissait simplement d'élever une "balle" qui sourit quand elle est nourrie, et qui grandit avec le temps.

    Je souhaiterais en fait que mon site soit comme constamment ré-actualisé, ce qui me semble impossible en PHP. Par exemple :

    Je souhaiterai que l'âge de la balle augmente tout seul au fil du temps. J'ai trouvé trois possibilités :

    1°) Lorsque l'utilisateur va voir sa balle, on calcule le temps écoulé depuis la dernière visite et on met l'âge à jour en conséquence (très simpliste, c'est la seule méthode que je sais utiliser pour l'instant).

    2°) On créé des "ordres différés" : si la balle grandit à chaque heure, on ordonne au programme PHP de s'exécuter seul (sans intervention humaine) à chaque heure pile pour faire grandir sa balle et actualiser ses stats (santé, âge...). Je ne sais absoluement pas comment faire ceci, et pouvoir le faire répondrait parfaitement à mon problème.

    3°) Le programme s'éxécute seul constamment, et se met systhématiquement à jour à chaque instant (exactement comme la 2° solution, mais pas uniquement quand cela est nécessaire, tout le temps).

    L'objectif à atteindre serait de (ce n'est pas ce que je veux faire, inutile de tout m'expliquer comment tout présenter, mais je souhaiterais juste savoir comment le faire) : créer un tableau sur une page, consultable par tous, donnant les balles les plus âgés. Actuellement, celui-ci ne serait juste que si tous les utilisateurs allait voir leur balle juste avant pour actualiser leur âge. Je souhaiterai que ce tableau soit juste à tout moment, en utilisant la solution 2 ou 3 par exemple, ou autre combine si vous avez.

    Merci d'avance de votre aide, et de l'attention que vous portez à mon message puisque vous avez réussi à le lire jusqu'au bout !

    Julien.

    [edit] Je m'excuse si mon sujet n'est pas très adapté à ce forum, car je pense probable l'utilisation d'un langage annexe, mais je ne savais où le placer ailleurs et ce cas très particulier ne se trouve pas dans les tutoriels...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Points : 430
    Points
    430
    Par défaut
    Solution la plus simple :

    Travailler avec une base de donnée dans laquelle tu viens enregistrer la date de création de ta "balle" et en fonction de ça avant de l'afficher, il ya juste a faire une soustraction de date pour connaître son age.

    Pour le fait qu'elle soit contente ou pas, même solution, base de donnée avec un id d'état de la balle, que tu fais varier.

    Bon courage.

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Bonjour,

    A mon avis, pour ce genre d'éxigences tu peux te tourner vers les crons.
    C'est l'équivalent d'une horloge a laquelle tu dis d'executer tel ou tel script php toutes les X secondes par exemple (ou n'importe qu'elle durée d'intervalle d'ailleurs).
    Par contre, celà t'imposera de prendre probablement un serveur dédié / personnel puisque les crons ne sont que rarement manipulables sur des hébergements classiques.

    Tu peux consulter ce tutoriel pour te faire une idée :
    http://matthieu.developpez.com/execution_periodique/

    Cordialement.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Tuss, tu as dû mal comprendre ma question : la solution que tu donnes est ma solution 1° que je souhaites justement éviter.

    Raideman, merci beaucoup, je me met de ce pas sur le tutoriel.

    Je compte pour le développement tourner en interne avec EasyPHP, donc je pense que ça devrait aller (oui ?), et par contre, il ne faut pas que cela s'actualise toutes les X secondes (même si je ne met que 1 seconde, il se pourrait qu'il y ait deux actions de deux utilisateurs dans la même seconde où l'une aurait dû influencer l'autre (edit) ), mais bien à telle date : par exemple 73 secondes après le clic, puis 13 secondes, etc, il ne s'agit pas d'un intervalle fixe (dans le cas de la solution 2°).

    Merci,
    Julien.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Re,

    En fait, celà revient au meme.
    En pratique, tu enregistres effectivemetn la date de derniere visite de la personne.

    Ton script en "cron" se lance toutes les secondes par exemple, et va à chaque fois faire une requete pour récupérer tous les éléments dont la date de derniere visite est égale à la (date en cours - 73 secondes) ou n'importe qu'elle intervalle !. En fait c'est juste une condition php basique à placer dans le script qui va etre en cron.

    En fait il faut voir le cron comme une horloge que tu peux paramétrer pour tester des conditions à tous les moments que tu veux.
    Si tu as besoin de faire des traitement toutes les X secondes, tu prends un intervalle d'une seconde et tu places tes X conditions dans le fichier php correspondant aux intervalles de traitement que tu souhaites.

    Par contre, si tu es sous windows, c'est un peu différent dans la technique pour toi puisque Windows fonctionne avec un autre gestionnaire que le gestionnaire "CRON", qui se nomme le "planificateur de tache".
    IL se trouve dans le panneau de config mais tu peux arriver aux memes résultats ( les puristes m'en voudront ) qu'avec CRON.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Ok merci, je comprends mieux, mais je vais prendre un autre exemple :

    Dans le cas d'un jeu de guerre intersidérale :
    0'0.156" : action du joueur 1 : détruire immédiatement et totalement la planète du joueur 2.
    0'0.598" : (par un miraculeux hasard) action du joueur 2 : évacuation immédiate de la planète.

    Si le script s'éxécute à t0=0 puis à t1=1sec, il va avoir un problème à t1 : une des actions empêche l'autre : suivant l'ordre dans lequel il les éxécute, le résultat ne sera pas le même (disparition ou non de la population de la planète du joueur 2).

    Cernes-tu mieux le problème ?

    Julien.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Points : 430
    Points
    430
    Par défaut
    Ce que je n'ai pas saisi alors c'est le but de rafraichir en continu ta base de données...

    A part faire travailler ton serveur ? Une autre solution serait que dès qu'un utilisateur se connecte tu mettes ta base de données à jour ,si cela n'a pas été fait depuis un certain temps, pour tous les joueurs. Ça évite de s'embêter avec des taches programmées..

    Et sinon, je pensais à l'origine à des procédures stockées, mais ce n'est peut-être pas faisable...

    Bon courage tout de même.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Ben en fait cette partie du script n'a pas besoin d'etre croné.
    En reprenant ton exemple:

    0'0.156" : action du joueur 1 : détruire immédiatement et totalement la planète du joueur 2.
    0'0.598" : (par un miraculeux hasard) action du joueur 2 : évacuation immédiate de la planète.

    L'action du joueur 2 se fait au moment ou il va cliquer sur l'évacuation, c'est à dire sur le clic utilisateur, ce n'est pas une action qui dépend d'un timer. Quand tu cliques sur évacuer, tu évacues et dans ta partie de code qui gere l'évacuation tu fais un test pour savoir si la planete existe !

    Celà dit, je comprends ce que tu soulèves comme souci, si on prend le cas ou tu as deux ordres en attente de traitement et qui sont censés s'executer dans la meme secondes.
    L'horloge cron se lance et va éxécuter le script php qui gere ces actions.
    Dans le script php, tu vas surement avoir quelque chose du genre :
    Va me récupérer les actions que je dois réaliser de maniere ordonnée de la plus urgente à la moins urgente.
    Premier résultat : je détruis la planete de j2
    Seconde résultat : j2 évacue : je renvoie une erreur disant que ce n'est pas possible.


    Celà dit, je le répète, dans ton exemple, le cron ne devrait meme pas intervenir.
    Si J1 donne un ordre d'attaquer et que 1H apres, la planete de J2 doit etre détruite.
    Et que J2 donne peu de temps apres l'ordre d'évacuer, tu peux :
    ->Soit le lui refuser directement puisque à sa demande, tu vas détecter qu'une attaque est en train de reduire sa planete en miette.
    ->Soit lui dire ok, tu peux donner l'ordre d'évacuer, mais quand J1 a terminé l'attaque, le cron enregistrera une erreur disant que l'évacuation est un échec car sa planete vient de disparaitre.

    La technique te permet beaucoup de choses, les soucis pour toi vont etre d'imaginer la conception pour choisir le comportement que ton jeu devra avoir, et modéliser la base de données en conséquences car techniquement tu peux partir du principe que presque tout est possible.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Mettre toutes la base de données à jour à chaque action de chaque joueur me serait possible, je parviendrais à le faire tout seul, mais est-ce réalisable ?
    Cela résoudrait en effet mon problème, et je resterai dans l'unique et simple PHP, mais le serveur serait-il capable de tout mettre à jour à chaque action, sans produire des temps de rafraichissement inacceptable ?

    Et sinon, peut-être que les "procédures stockées" correspondent à ma solution 2°, qui conviendrait aussi, mais comment le faire ?

    Enfin, le but de rafraichir est simple : encore un exemple (tiré de "Tribal Wars").

    Un village produit régulièrement des ressources.
    A une date de visite de l'utilisateur t0, tous les greniers sont vides.
    Il vient à se faire piller à une date t1.
    Il faut que le statut du village ait été raffraichis depuis, car sinon le pillage ne prendra que les ressources présentes à t0 : rien.

    De plus, faire la différence t1 - t0 ne marcherait pour donner les ressources produites, mais dans ce seul cas simplifié : si une autre ferme a fini d'être construite entre temps et que, depuis, la production de ressource est accélérée, tout est faussé, le pillage n'aura pas récupéré toutes les ressources.

    Ai-je réussi à être clair et vous faire comprendre ce que je voulais vous demander ?
    Merci,
    Julien.

    [edit] : je n'ai répondu ici qu'à Tuss, pas eu le temps pour le 2e message.

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci Raideman, tu as compris mon problème : je l'ai ommis et m'en excuse, mais il s'agissait évidement dans les deux cas (les deux actions) d'ordre différés, en attente de traitement.

    Je dois y aller, et je vais en profiter pour méditer sur vos réponses, pour essayer de bien tout saisir avant de vous confirmer ou opposer autre chose.

    Merci de votre aide,
    Julien.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    397
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 397
    Points : 430
    Points
    430
    Par défaut
    En fait, ton but est de faire un moteur de jeu qui viennent couvrir tous les systèmes de jeux imaginables...

    J'étais parti sur un système simple du genre : "j'élève mon animal, il grandit c'est bien".

    Mais je pense que tu devrais d'abord définir ce qu'il sera possible de faire avec ton jeu, avant de t'intéresser aux technologies.

    Ou alors, je me trompes, et tu veux faire un jeu de gestion d'élevage, ou on peut piquer des ressources aux autres et envoyer des attaques programmées etc...

    Et dans ce cas là, il va vite falloir une équipe de développeurs...

    Bon courage si tel est le cas et également si ce n'est pas le cas d'ailleurs.

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Après réflexion, je pense que l'idée de Raideman conviendra parfaitement.
    Il reste la faille que, dans la même seconde, il faudra définir un ordre de priorité en effet, mais des intervalles de une seconde sont très raisonnables et sont suffisants, et sont bien mieux que les intervalles séparant deux connections pour attendre la réactualisation...

    (edit) Je vais tenter avec le planificateur de tâche, mais si qqn a une autre proposition de combine, je suis preneur !

    Donc merci pour votre aide, et au besoin je repasserai !

    En réponse à Tuss : le jeu que j'imaginais est en effet vraiment complexe, et il m'était impossible de vous le détailler, il aurait été très long à ne serait-ce que vulgariser.

    Je ne suis pas sûr de bien te suivre, mais le jeu de gestion d'élevage s'en rapprocherai pas mal. Il ne s'agit donc pas de couvrir tous les systèmes imaginables, mais juste un "jeu d'élevage" pas mal avancé.

    Et quant à l'idée de l'équipe de développeurs, tu me rassures un peu : ça fait quelques mois que je faisais progresser l'idée et le gameplay, que je précise toujours mieux le concept sur le papier et que je réfléchissais à comment le coder, le bouleau me paraissait énorme : je pensais que je n'étais que grand débutant et donc assez mauvais, mais apparement c'est normal !

    Donc je suis en effet seul pour le faire, n'ayant pas trouvé de copain partageant mon projet, mais je pense que ça sera jouable.

    Merci encore,
    Julien.

Discussions similaires

  1. [CR7]Actualisation des données depuis VB
    Par elifqaoui dans le forum SDK
    Réponses: 4
    Dernier message: 24/11/2003, 13h44
  2. requete SELECT avec un nombre constant
    Par gurumeditation dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/07/2003, 20h04
  3. Gestion des constantes
    Par valfredr dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/06/2003, 16h23
  4. [ADO] Constantes des types de champ
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/09/2002, 11h08
  5. Au sujet des constantes
    Par FranT dans le forum Langage
    Réponses: 8
    Dernier message: 09/08/2002, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo