Timer

Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
- - Dernière réponse : codefalse
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
- 22 janv. 2008 à 09:17
Bonjour,

j'ai une tite idée en tête et j'aimerai la réaliser mais pour ca il me faudrait une sorte de Timer..

En fait j'aimerai que ma page exécute une requête SQL toutes les deux secondes. J'ai essayé avec sleep() mais ca ne fonctionne pas car les actions sont effectuées qu'à la fin de tous les sleep donc rien ne fonctionne. Et je ne veux pas faire une boucle while inifinie qui va pomper toutes les ressources surtout que plusieurs utilisateurs seront sur cette page, donc ca risque de faire exploser le serveur..

Donc y a-t-il une fonction permettant de patienter x secondes avant l'exécution d'une fonction ?

Merci

Apprendre le VB6
Afficher la suite 

14 réponses

Messages postés
1162
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
2
0
Merci
A mon avis, faut que tu utilises cron (ou webcron.org). Ceci dit, le pas étant de 60 minutes, soit tu crées 1800 réplicats de ton scripts, soit soit tu optimises en te disant que tu peux boucler 15 fois avant le timeout et faire donc 120 réplicats de ton script ou encore tu utilises une variante pour outrepasser le timeout comme http://www.phpcs.com/codes/EXECUTER-SCRIPT-DELA-TIMEOUT-PHP_45336.aspx et, en faisant tout de même gaffe à ne pas vampiriser toutes tes ressources, tu passes à des boucles de 60 itérations par exemple, ce qui descend à 30 le nombre de tes réplicats.

*****
noisy communication - wherever, be everywhere!
Commenter la réponse de malik7934
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Salut,

ca reste quand meme du lourd étant donné que beaucoup de visiteur pourront se trouver sur cette page en même temps et que je dois faire ça à un autre endroit du site... Ne serait-il pas plus "optimisé" de faire un refresh de la page toute les 2 secondes ?

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
0
Merci
Yop :)
En fait ca va dépendre du type de tache à effectuer.
Si cette tache doit etre faite obligatoirement toutes les 2 secondes, même sans visiteurs, ca va être dificile.
La plupart des services cron (webcron) ont un taux d'erreur de 5 minutes (donc quand tu demande pour 18.00, ca peut-etre 17.55 ou 18.05). Donc si tu veux à la seconde près, c'est pas possible.

Si la commande doit s'executer de temps en temps, ce que je faisais perso, c'est des frames avec une invisible, qui executait ma requete, dedans tu peux y mettre un timer en javascript qui va t'executer tous les x temps un rafraichissement par exemple (ou l'appel d'un fichier php par xmlhttprequest) et c'est bon. Seul inconvénient, il te faut des visiteurs :p

Essaye de détailler plus ton probleme histoire de voir quel est la meilleure solution :)
Commenter la réponse de codefalse
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Salut,

en gros, c'est un combat entre deux visiteurs. Ils sont dans la même pièce et ils jouent l'un contre l'autre. Donc quand un tape, il doit vérifier si l'autre à taper pour voir qui frappe le plus fort et remporte la manche, il faut donc bien un petit script qui vérifie toute les deux secondes, une fois qu'un type a tapé si l'autre a tapé. La vérification se fait par une requête SQL qui vérifie si le coup est présent dans la base de données.

Si pas de coup, refresh, sinon affichage du résultat...

Merci de votre aide ;)

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
0
Merci
c'est du super lourd alors ! :/
Parce que faire une requete sql toutes les deux secondes pour seulement 2 visiteurs, tu va bombarder ton serveur de requete :/

Mais bon en meme temps je ne vois pas d'autres solutions :p
Commenter la réponse de codefalse
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Ben moi non plus xD, j'ai beau réflechir je vois pas ZE solution

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
0
Merci
Je verrai bien du flash mais c'est pareil au final, tu envoie une requete au serveur :/
Honnetement là je vois pas, j'ai un pote qui fait un jeu ou il faut en permanence envoyer des requetes, et c'est ce qu'il fait...

Désolé je pourrais pas t'aider plus ! :/
Commenter la réponse de codefalse
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
J'ai pensé au flash, mais j'ai une hésitation... J'hésite à l'apprendre en fait...

Est-ce plus adapté ? Dans le sens que, voici les problèmes que j'ai :

Tout d'abord cette histoire de rafraichissement : est-ce que Flash possède une sorte de fonction permettant de faire un timer sans que la page soit rechargée sans cesse ?
Ensuite, est-ce que Flash sait détecter lorsque l'utilisateur quitte l'animation. Dans le sens que si un joueur sort de la partie, c'est directement l'autre qui gagne, donc il faut que l'autre utilisateur soit averti que l'autre joueur a quitté le script, le plus simple serait donc de supprimer directement une donné dans la base de données lors du départ du joueur, est-ce possible de le détecter avec Flash ?

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
0
Merci
En fait c'est possible avec flash, mais pour pouvoir connaitre l'état entre les deux joueurs, il faudra quand meme faire des requetes sur le serveur, c'est plus flexible que javascript (pas de rafraichissement, savoir quand un des joueurs clique, quitte, etc) mais par contre c'est toujours pareil pour les requetes ! :/

Donc voila
Commenter la réponse de codefalse
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17
0
Merci
Hello,

on peut savoir en flash si un utilisateur a quitté le flash ? Comment ?
Moi je ne le gèrerais pas comme ça : gestion en javascript et comptage des points à la fin. Au bout d'un certain temps (bien plus de 2 secondes), une requête ajax pour mettre à jour ta base de données. Tu peux très bien détecter en js qui n'a pas frappé depuis trop longtemps et le déclarer perdant. Bref, je ferais mes requêtes uniquement pour comptabiliser les points : js te sert à gérer la période "interactive" (sans raffraichissement d'ailleurs).
Commenter la réponse de malalam
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
0
Merci
En fait chuis pas sur pour le fait de quitter, mais j'ai trouvé ca :

<ol><li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
_root.onQuit = function(){
</li><li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
ssCore.App.setKioskMode({flag:"false"});
</li><li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
ssCore.App.forceQuit({});
</li><li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
};
</li><li style="font-family: 'Courier New',Courier,monospace; color: black; font-weight: normal; font-style: normal;">
ssCore.App.setNotify({event:"onQuit"},{callback:"onQuit",scope:_root});
</li></ol>

Maintenant faut voir :p

Apres ca dépends du type de jeu pour les requetes, si c'est connaitre la position d'un gars pour lui envoyer une flechete (par exemple), faire une requete toutes les 2 secondes, c'est déjà trop lent !
Mais si c'est savoir si quelqu'un à appuyé sur un bouton d'une réponse à une question, c'est autre chose..

Faut poser le probleme concretement :p
Commenter la réponse de codefalse
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Ué je viens de me mettre un peu au flash et j'ai déjà réussi à faire 2-3 trucs, je pense que c'est la technologie que j'utiliserai. Maintenant pour les requêtes je n'ai de toute façon pas le choix, je vois pas comment l'animation pourrait être au courant d'un changement d'état.

La seule solution que je vois c'est une façon de lier les deux animations ensemble (des deux joueurs) et que celles-ci communiquent directement entre elle avec des sockets, mais je n'ai pas la moindre idée quant à la possibilité de réalisation de cela...

D'un autre coté, les parties ne duront pas très longtemps, donc les requêtes, c'est peut être pas le problème principale. Je vais tester ainsi et je verrai les performances sur un serveur Free et si ca ne va pas, je reviendrai surement t'embêter :p

Merci pour ton aide

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
247
Date d'inscription
dimanche 27 avril 2003
Statut
Membre
Dernière intervention
26 septembre 2008
0
Merci
Je n'avais pas vu ton post malalam.

Ta solution me semble un peu compliquée pour un néophyte dans mon genre... Je vais dans un premier temps creuser du coté de flash avec juste cela. Maintenant j'entend de plus en plus parler d'Ajax, il serait donc interessant de fouiller de ce coté là aussi. Je vais un peu essayer dans toutes les directions pour voir un peu quelle est la meilleure.

Merci de votre aide

Apprendre le VB6
Commenter la réponse de Ziman
Messages postés
1127
Date d'inscription
mardi 8 janvier 2002
Statut
Modérateur
Dernière intervention
21 avril 2009
1
0
Merci
On peux dire que Ajax, c'est du flash en html/js.
Maintenant le flash ce sera plus facile (d'apres moi :p).

Tu ne peux pas faire communiquer deux clients ensembles par les sockets, ca doit forcément passer par un serveur.

Apres tu peux utiliser flex (technologie coté serveur pour flash), le problème : c'est payant, et trop cher :p

Donc la solution d'envoyer des flux xml reste la meilleure solution!

N'hésite pas si tu a des problemes ! :)
Commenter la réponse de codefalse