Bonjour à tous, j'ai un petit problème de conception là
Je cherche en fait à faire pour un jeu en Javascript un chronomètre : le plus rapide sera sensé gagner. La précision doit être au millième de seconde.
Je souhaite que ce chronomètre s'affiche côté JS, à titre d'information, et c'est ce que je fais avec ceci :
Code :
function setChrono() { globalChrono++ ; compte = setTimeout('setChrono()',1000) ; remplirChrono(globalChrono) ; //pour mettre à jour l'affichage de la div }
|
Pas besoin d'être plus précis, à la seconde cela suffit.
Cependant, pour d'évidentes raisons de sécurité, le vrai décompte se fait côté PHP, avec des microtime(). Quand le jeu est fini, je fais le calcul pour en déduire le temps passé sur le jeu :
Code :
function stopChrono() { //on récupère le microtime stocké an lancement de la partie $mtOld = $_SESSION['chrono'] ; //on explode les secondes et millisecondes $oldMt = ((float)$oldUsec + (float)$oldSec); $newMt = ((float)$newUsec + (float)$newSec); //on fait un arrondi au millième de seconde //puis on découpera le string afin de résoudre le problème que si on a 1.200, on affiche 1.200 et pas 1.2 $chronoMt = (string )(round($newMt - $oldMt, 3) * 1000) ; $chronoMt = $i . '.' . $d ; return $chronoMt ; }
|
Le problème est que j'obtiens à la fin un décalage clair entre le JS et le PHP. Je peux ainsi obtenir sur le JS un temps de 69 secondes, et 72.214 secondes en PHP : le JS s'écoule plus lentement que le PHP. Ca se comprend un peu ( côté client moins fiable que côté serveur ), mais bon....
Evidemment cela peut troubler le joueur qui obtient un résultat différent de qu'il a vu.
Une solution je pense serait de passer par Ajax : régulièrement ( toutes les 5 secondes on va dire ), j'interroge le serveur, celui-ci me renvoit le décompte PHP en cours ( tronqué à la seconde cette fois-ci ), et j'écrase le décompte JS en cours avec celui-ci. Mais est-ce que je ne risque pas de surcharger le serveur ainsi ? Est-ce qu'on risque pas d'avoir des sautes du chrono JS ?
Ou bien existerait-il une autre solution ?
Merci d'avance pour vos lumières
PS : je ne savais pas où le mettre, dans la section JS ou PHP, alors je l'ai mis ici...
Message édité par DaSayan le 17-06-2009 à 17:22:18
---------------
Tous les programmeurs sont des auteurs et tous les ordinateurs sont de mauvais acteurs.