JeuWeb - Crée ton jeu par navigateur
Horloge système et horloge matérielle - 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 : Horloge système et horloge matérielle (/showthread.php?tid=911)

Pages : 1 2


Horloge système et horloge matérielle - Yoda54 - 06-03-2007

Bonsoir,

Pourriez-vous m'expliquer précisémment la différence entre ces deux horloges?

Je constate une dérive permanente de l'horloge système du serveur qui héberge la version test de mon jeu et par voie de conséquence, un décalage des tâches CRON par rapport à l'horloge affichée dans le jeu. J'ai vu la possibilité de créer une tâche CRON mettant à l'heure les deux horloges régulièrement mais pour cela, il faut l'adresse d'un serveur temps et google ne m'a appris grand chose là-dessus malgré mon ignorance étendue.


RE: Horloge système et horloge matérielle - gtsoul - 07-03-2007

tu cherches un serveur de temps ?
http://www.cru.fr/NTP/serveurs_francais.html

c'est quand même bizarre qu'il y ait un décalage entre ton cron et l'heure affichée sur ton site. Apache et cron sont-ils sur la même machine ?
Tu ne chercherais pas l'heure via du javascript ?


RE: Horloge système et horloge matérielle - Plume - 07-03-2007

Je crois que son problème c'est que le CRON s'exécute bien à la bonne heure sur le serveur, seulement c'est le serveur qui connait un décalage genre 58min au lieu d'une heure.


RE: Horloge système et horloge matérielle - Yoda54 - 07-03-2007

Bonsoir,

Apache et CRON sont bien sur la même machine. En fait, j'ai constaté qu'il y avait deux heures différentes sur le serveur, les deux que j'ai mentionnées dans mon premier post. L'une ne dérive, et c'est visiblement celle-ci qui s'affiche sur les pages du jeu (via JS en effet), l'autre, qui dérive, et celle utilisé par le CRON. Cela doit faire deux mois que je n'avais pas regardé ces deux heures et le décalage était de 36 minutes.
Merci pour le serveur temps, je vais aller voir ça.


RE: Horloge système et horloge matérielle - gtsoul - 07-03-2007

il faut éviter d'afficher une heure absolue en js, car c'est l'horloge du client et non celle du serveur qui est prise en compte ; et donc le décalage du fuseau horaire du client est pris en compte =>personne n'aura la même heure sur ton jeu.
Essaye de changer l'heure sur ton ordi perso et revisite ton site.

pour rappel, tu peux avoir le timestamp actuel avec la fonction time(), renseigne toi sur sa doc pour la formatter correctement.


RE: Horloge système et horloge matérielle - Yoda54 - 07-03-2007

arf, je n'avais pas pensé à cela. Merci gtsoul.
Par contre, pour avoir une horloge dynamique sans rafraîchir ma apge, il faut bien que je passe par JS à un moment ou à un autre; il faut donc un moyen pour récupérer l'heure du serveur et la transmettre à JS. Un date sur le timestamp actuel et des champs cachés pour pouvoir récupérer les données?


RE: Horloge système et horloge matérielle - gtsoul - 08-03-2007

tu instancies une variable js avec une valeur du time() php
Code PHP :
<?php 
var time_js = <?php time();?>
Puis tu réalises une fonction js pour l'incrémenter à chaque seconde
Code PHP :
<?php 
upTime
(){time_js++;} .............. setTimeOut(upTime(),1000);

Comme l'utilisateur aura la bonne heure, et celle-ci sera automatiquement à jour


RE: Horloge système et horloge matérielle - Dradge - 08-03-2007

Il ne faut en aucun cas utiliser l'heure donnée par javascript pour faire des calcul qui se veulent être précis et critiques. Car le setTimeout de 1000ms raletira l'horloge sur de très longue durée d'affichage. Et ceci sans parler de la charge processeur du client et il est aussi possible de stopper l'horloge en affichant les propriétés de la page ou tout simplement en désactivant le javascript Tongue


RE: Horloge système et horloge matérielle - Yoda54 - 08-03-2007

Il me semblait avoir lu qu'il n'était pas possible de récupérer une variable php dans JS, il semblerait que je n'avais pas parfaitement compris ce que j'avais lu.

@Dradge, l'horloge via Javascript sera simplement indicative pour les joueurs, aucune action ni aucun calcul ne seront basés dessus. Côté charge processeur du client, est-elle vraiment si importante? La grosse majorité des jeux de gestion sportive utilise ce système, je ne pense donc pas que cette charge soit trop importante. Quant à l'utilisateur qui bloque le JS, il n'aura pas l'heure de référence du jeu mais cela ne gênera pas ses actions.


RE: Horloge système et horloge matérielle - Roworll - 08-03-2007

Pour éviter les écarts de calcul de temps sur les petits modules locaux en JS, je calcule mes infos à partir d'une date de base établie au chargement de la page.
Code PHP :
<?php 
<script language="javascript" type="text/javascript">
var
oDate=new Date();
//dBase est la date JS qui me sert de base pour les calculs
var dBase=Math.round(oDate.getTime()/1000);

//Lancement initial de la procédure
ScanProgress();

function
ScanProgress(){
//Initialisation de la date qui servira a calculer la différence
var oDate=new Date();
//dDiff contient le nombre de secondes réellement écoulées depuis le chargement de la page
var dDiff=Math.round(oDate.getTime()/1000)-dBase;

/*
Mettez ici vos traitements JS
*/

//setTimeOut pour un rappel dans 1 seconde
setTimeout(ScanProgress,1000);
}
</
script>
Le setTimeout() peut se décaler tant qu'il veut, cela n'influera pas sur le calcul du temps écoulé depuis le chargement de la page.
A chaque passage dans le traitement, dDiff contiendra toujours le nombre de secondes écoulées depuis le chargement de la page.

Accessoirement, on peut se baser sur l'heure serveur en initialisant la variable dBase avec <php time(); ?> comme proposé par gtsoul.