Forum TourDeJeu · Règles du forum | Aide Recherche Membres |
Bienvenue invité ( Connexion | Inscription ) | Recevoir à nouveau l'email de validation |
-=[ X-ZoD ]=- |
Ecrit le : Mardi 01 Mars 2005 à 00h05
|
Pro Groupe : Membre Messages : 157 |
pkoi en php ?
pour qu'il puisse effectuer une requete SQL a la fin.... j'ai deja trouver du java...mai a moins d'apler une autre fenetre qui contient un code php bha il n'y a aucun moyen de fondre le php ds le java...j'espere trouver d'autres programmeur ici ou tout simplement des internautes qui ont trouvé le script [bien que je considere avoir eplucher toutes les pages de google]...merci d'avance -------------------- |
khiguard |
Ecrit le : Mardi 01 Mars 2005 à 00h59
|
Ouf Groupe : Membre Messages : 732 |
Ca dépend ce que tu voudrais faire, si c'est un rafraichissement de page, fait le en javascript.
@+ -------------------- Alonya : Jeu de gestion/stratégie par partie.
Sombre Destin : Jeu de gestion/stratégie massivement multi joueur. Antre du Cercle des Dragons Noirs: portail jdr | G-nerik: Système générique de jdr |
Nonothehobbit |
Ecrit le : Mardi 01 Mars 2005 à 02h31
|
Alien Groupe : Moderateurs Messages : 1298 |
Si tu veux un compte à rebours "client", c'est-à dire fait par l'utilisateur, utilise un meta refresh, ou du javascript comme l'a dit khiguard.
Si tu veux un compte à rebours "serveur", c'est à dire indépendant de l'action du joueur, je te conseille d'utiliser des crontab, ou la commande "at". Cela dit, je me demande bien pour quelle utilisation tu en as besoin... PS : quand tu dis java, c'est javascript ou java ? -------------------- |
-=[ X-ZoD ]=- |
Ecrit le : Mardi 01 Mars 2005 à 08h22
|
Pro Groupe : Membre Messages : 157 |
le problem n'est au niveau du java.....par exemple je souhaite faire un compte a rebour du style:
- perd 10 points de vie toutes les 45 min du coups au bout du coumpte a rebour faudra effectuer des requetes du style -SELECT HP from user where login like $login blabla bla hp=hp-45 update hp where login like $login vou voyez au bout des 45 min il modifie la table dans la bdd.....donc le java est exclue et c'est donc un compte a rebour niveau serveur q'uil me faut.... -------------------- |
gorgu |
Ecrit le : Mardi 01 Mars 2005 à 09h41
|
Ouf Groupe : Membre Messages : 417 |
la solution est soit dans ton crontab
soit sur chaque page "stratégiquement choisie" tu inclu un petit test. dans sql tu place le timestamp du dernier calcul pour monsieur toto. sur ta page "stratégique" tu calcul le timestamp du moment -45 minutes et tu fait un update pointvie=pointvie-1,heurecalcul = NOW() from lesbonhommes where heurecalcul < $tempscalcul -------------------- |
-=[ X-ZoD ]=- |
Ecrit le : Mardi 01 Mars 2005 à 13h18
|
||||
Pro Groupe : Membre Messages : 157 |
waw ça m'a l'"air interessant....bien que je ne comprenne une partie de ce dont tu parle... crontab par exemple [mai je vai faire une recherche sur google c po important]
timestamp ? le dernier calcul?.....calcul de koi?
le now() je ne vois pas a kel fonction il renvoi et tempscalcul semble etre une variable que je ne voi pas comment declarer... sinon selon ce que j'ai compris il faut qu'il y est un time declarer dans la base de donner et ensuite sur la page on verifie si le time de la table du user corespond a celle de la base et par la suite on decide de ce qui se pass.... mai c'est super flou dans ma tete ...dommage car ça m'a l'air super interessant.....si tu peux m'en dire plus stp avec un exemple precis ..... voir meme le code. -------------------- |
||||
Arckam |
Ecrit le : Mardi 01 Mars 2005 à 14h24
|
Pro Groupe : Membre Messages : 137 |
[mode petite pique ON]
Ben alors -=[ X-ZoD ]=-, je croyais que tu assurais [mode petit pique OFF] Bon, un timestamp c'est une façon d'enregistrer la date & l'heure. Le timestamp (un horodateur en français me dit google) correspond (par exemple) au nombre de secondes depuis le 1 janvier 1970. Il te parle du dernier calcul... celui de tes 45 minutes tient C'est pas bien compliqué. Tu avais bien compris. Chaque fois qu'un visiteur tombe sur ton bout de code tu calcules la différence entre le timestamp que tu as enregistré et le timestamp actuel. Si elle est supérieure à 45 minutes, paf, tu calcul tes machins, puis tu enregistres un *nouveau* timestamp... et ainsi de suite. Pour les exemples je passe, c'est vraiment pas dur, tu va y arriver sans problème. Enfin, la crontab c'est une fonctionnalité linux (unix) qui te permet de planifier des executions de scripts nottament. C'est comme le planificateur de tâches sous Windows, mais en plus fouillé. C'est une solution *vraiment* plus propre que ce que je t'expliquais plus haut. Voila, voila, bon boulot EDIT: J'oubliais... now() te donneras le timestamp actuel $tempscalcul c'est ton temps a toi (que tu viens de calculer). |
gorgu |
Ecrit le : Mardi 01 Mars 2005 à 21h51
|
Ouf Groupe : Membre Messages : 417 |
-------------------- |
Nonothehobbit |
Ecrit le : Mardi 01 Mars 2005 à 22h21
|
||
Alien Groupe : Moderateurs Messages : 1298 |
Mwé. Je sais pas si dans un jeu à plusieurs centaines de joueurs avec ce genre de compte à rebours dans tous les sens, la crontab est vraiment plus propre. PS : évitez de prendre la mauvaise habitude de racourcir javascript en java, ça fait mal aux oreilles. (pis accessoirement, on s'emmele les pinceaux ) -------------------- |
||
Arckam |
Ecrit le : Mercredi 02 Mars 2005 à 10h32
|
Pro Groupe : Membre Messages : 137 |
Dans un jeu avec plusieurs centaines de joueurs tu t'arranges surtout pour traiter ça differemment
En ce qui me concerne je ferais tourner un script léger (le plus léger possible) à intervalle de temps régulier (toutes les secondes, ou toutes les minutes par exemple) pour traiter en une seule passe tous les joueurs qui tombent dans cette intervalle. Ca fait un seul appel, et pas des cron dans tous les sens Dans un monde parfait je ferais ça dans un autre langage d'ailleurs, plutot qu'en PHP (à moins que le php ne gère les threads ? je ne me suis jamais posé la question tient ). |
naholyr |
Ecrit le : Mercredi 02 Mars 2005 à 11h10
|
||
Ouf Groupe : Membre Messages : 423 |
PHP n'est pas thread-safe. Et puis quite à utiliser des threads je ne vois pas pourquoi on n'utiliserait pas crontab un petit cron qui appelle toutes les 5 minutes (l'idéal serait toutes les minutes, mais ne soyons pas trop fou) un script qui va bien, et puis c'est reglé, sans trop encombrer le serveur. Cela dit, personnellement je ne suis pas fan des solutions trop côté serveur, en particulier crontab. J'aime imaginer que je peux poser mon site n'importe où, même si je n'ai pas la possibilité d'accéder au crontab sur le serveur Donc la solution expliquée par Arckam (présentée par gorgu) a ma préférence. |
||
Arckam |
Ecrit le : Mercredi 02 Mars 2005 à 12h30
|
Pro Groupe : Membre Messages : 137 |
On va croire que j'essaie d'avoir le dernier mot
En fait, en y reflechissant, je me dit que tout dépend de ce que tu vises. La solution qui récolte le plus de suffrages (étonnament à mon sens, mais bref) est celui du bout de code. Seulement d'après moi cette solution n'est viable que sur un petit nombre de visiteurs. Passé un certain cap tu risques d'avoir un overhead insupportable. Maintenant de là à définir ce nombre ... La solution du cron, plus efficace déjà, sous entend d'avoir accès à une machine (pas forcemment ton serveur). Il existe webcron d'ailleurs qui est bien utile. Je disais plus efficace car tu peux effectuer en un seul appel toutes tes opérations, et donc améliorer le déroulement de tes mises à jour. En plus, l'overhead lié à tes mises à jour n'est plus dépendant de l'affluance sur ton site, ce qui est franchement un avantage. La dernière solution, le compilé (avec ou sans threading d'ailleurs), généralement inapplicable dans notre cas, est sans aucun doute la plus efficace. Mais d'une part tu dois pouvoir lancer un executable et d'autre part tu n'est effectivement plus aussi portable (ceci dit, c'est déjà le cas, je parie que 90% des jpc's ne seraient pas capable de passer de mysql à postgre sans recoder une bonne partie). Bref, on s'éloigne Tout ça pour dire que dans ton cas (peu de joueur, du moins maintenant, et peu d'opérations) effectivement la technique du bout de code sera efficace. |
naholyr |
Ecrit le : Mercredi 02 Mars 2005 à 12h41
|
||
Ouf Groupe : Membre Messages : 423 |
C'est là que je ne te comprends pas. En quoi une appli qui tourne en arrière plan (un service ?) qui va faire les mises à jour à intervalle régulier serait plus efficace qu'un crontab (qui fait à la virgule près exactement la même chose ) ? |
||
Arckam |
Ecrit le : Mercredi 02 Mars 2005 à 13h43
|
Pro Groupe : Membre Messages : 137 |
Ton cron appellera un script php, alors que tu pourras très bien tout faire dans ton appli, et donc profiter des avantages qu'un langage compilé t'apporte.
|
-=[ X-ZoD ]=- |
Ecrit le : Mercredi 02 Mars 2005 à 13h57
|
Pro Groupe : Membre Messages : 157 |
bha arcam j'ai dit que jme debrouilllais mais j'ai pas dit que je taffais deja dans une boite
en tout cas merci a toi effectivment ta methode m'a l'air supra interessante a l'exception que je pourai pas afficher le compte a rebour a l'ecran....mais bon ça je verrais quand le jeu commencera a devenir tres propre..je pofinerais.. Gorgu merci a toi aussi pour le soutien ek ta page...je pensais deja chercher mais tu me fai gagner po mal de temps -------------------- |
gorgu |
Ecrit le : Jeudi 03 Mars 2005 à 03h17
|
Ouf Groupe : Membre Messages : 417 |
pour la charge...
ouaif... j'ai un peu des deux méthodes, 400 joueurs... et c'est pas cette partie là qui fait le plus mal au serveur virez les phpbb et autres objets mal foutus avant de vous lancer dans ce niveau d'optimisation -------------------- |
Sybler |
Ecrit le : Mardi 05 Avril 2005 à 20h30
|
Ouf Groupe : Membre Messages : 453 |
Il existe une autre methode, j'ai personnellement opté pour cette méthode afin d'assurer une compatibilité maximal en cas de changement rapide de serveur.
Le calcul de temps désyncronisé. Il suffit d'attendre qu'un joueur (n'importe qui) demande une page sur le site. Du coup, tu fait un code qui calcul si les 10 minutes sont écoulé depuis la derniere page, si oui, calculer combien de tranche de 10 minutes se son écoulé et exécuter la requete. Voilà, j'explique pas plus car c'est relativement complexe à coder dépendament de ton niveau, donc je n'entre pas trop dans les détails vu que cette méthode risque fort d'etre écartée L'avantage pas contre, c'est que cronjob va exécuter disons 1000 requetes au 10 minutes d'un seul coup, alors qu'avec une méthode désynchroniser, le début du 10 minutes peut etre différent pour chaque joueur, et donc éviter une tonne de requete simultanée. -------------------- |
Sybler |
Ecrit le : Mercredi 27 Avril 2005 à 19h29
|
Ouf Groupe : Membre Messages : 453 |
Sinon:
Tu met un petit iframe qui affiche un compte à rebour en JavaScript. Lorsque ce compte à rebourd est finit, tu fais une redirection vers une page PHP qui démarre un nouveau compte à rebourd... et évidament, qui fait ta requete. Ca évite de recharger toute ta page pour faire une seule requete pendant qu'un joueur tappe un gros texte en fait -------------------- |
-=[ X-ZoD ]=- |
Ecrit le : Samedi 30 Avril 2005 à 23h39
|
Pro Groupe : Membre Messages : 157 |
ta premiere idee sybler bha j'ai opté pour la meme chose au debut...d'ailleur je l'utilise encor
mai t'a deuxieme methode est interessante meme tres interessante vai me pancher dessus merci pour le coup de main -------------------- |