Affichage différent de microtime() d'un poste à l'autre

Signaler
Messages postés
6
Date d'inscription
samedi 18 mars 2006
Statut
Membre
Dernière intervention
27 février 2010
-
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
-
Bonjour à tous,

J'ai un problème très surprenant : j'ai une page PHP5 qui ne fait qu'afficher microtime() : "echo microtime();". Logiquement, et c'est le cas le plus souvent, les différentes personnes qui consultent cette page affichent le même résultat au même moment. Mais j'ai régulièrement le cas de 2 personnes qui ont 10 à 20 secondes d'écart (alors qu'elles synchronisent leur appui sur la touche F5). C'est tout à fait incompréhensible et lorsque cela se produit, le problème est alors systématique entre ces 2 personnes jusqu'à leur déconnexion.

J'ai ajouté les lignes
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Fri, 01 Jan 2010 00:00:00 GMT");
juste avant au cas où ce serait un problème de cache, mais cela ne change rien.

Si quelqu'un a une idée, je suis preneur, car, là, je suis sec ...

13 réponses

Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Ton problème n'est pas un problème puisqu'il faut regarde à quoi sert microtime --> microtime — Retourne le timestamp UNIX actuel avec les microsecondes. Il faut donc que tu fasses un 'start' pour prendre la valeur courant de microtime et un 'stop' qui viendra faire la différence entre ton microtime courant et la valeur à 'start'.
Par contre, 10 à 20 secondes je trouve ça beaucoup. Mettent-elles 10 à 20s de différence pour afficher la page ? L'unité de microtime est la milliseconde.
J'espère t'avoir aidé.
S.
Messages postés
6
Date d'inscription
samedi 18 mars 2006
Statut
Membre
Dernière intervention
27 février 2010

Oui, mais le timestamp du serveur est le même pour toutes les personnes qui se connectent à ce serveur, et c'est là que ça coince puisque ce n'est pas le cas , d'autant que lorsque je loggue les valeurs de microtime que j'affiche pour chaque demande, je vois bien que pour une personne j'affiche des valeurs supérieures de 10-20 secondes (et non millisecondes) alors qu'à ce moment là j'étais en train d'afficher des valeurs "normales" aux autres ... C'est à n'y rien comprendre ...
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Comment veux tu avoir les mêmes valeurs pour des personnes qui se connectent sur des postes différents ?
Si j'appelle ta page en appuyant simultanément sur le F5 de mon 300Mhz en modem 56k et sur mon quad core dernier cri en ADSL il est évident que la valeur affichée va varier énormément.

j'ai loupé quelque chose ???


Cordialement,


Kohntark -
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Kohntark,
Je ne pense pas que la vitesse du processeur du client joue beaucoup dans l'histoire dans la mesure ou c'est une histoire de flux réseau, socket, connexion etc.. Par contre pour la ligne je suis 100% d'accord, mais même s'il peut y avoir des différence dans la récepton, y'en a t il vraiment de significatif dans la requete HTTP pour lancer la création de la page ??
Le mystère reste entier.
S.
Messages postés
6
Date d'inscription
samedi 18 mars 2006
Statut
Membre
Dernière intervention
27 février 2010

Le problème, c'est que ces personnes affichent la page en même temps en se synchronisant au téléphone et que la différence n'est pas de quelques secondes mais de 10 ou 20 secondes. De plus, en loggant les appels à cette page, je me retrouve avec des valeurs de microtime dans le désordre, ce qui n'est pas normal. Incompréhensible ...
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Oui mais via le téléphone c'est pas pareil, le cheminement est tout de même différent au niveau réseau.
Quel est ton intérêt d'avoir les logs dans un ordre ou dans le désordre ? Dans tes logs lors du traitement tu les remets dans l'ordre que tu souhaite. Hélas on peut remettre en cause plein d'élément, le Navigateur, le téléphone et sa gestion des sockets, l'opérateur téléphonique etc..
S.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut Syndrael,

Je suis bien d'accord avec toi, j'essayais juste d'attirer l'attention de clodinfo sur le fait qu'il ne pourrait jamais avoir une valeur commune à tout les clients.
Quand je cite la vitesse processeur je parle plutôt de la config en générale.
Il est clair qu'une différence de 10 secondes est vite atteinte entre un 300MHz / 256MB RAM et 350MB engagés / modem 56k (etc ...) et une config récente. Si on appelle la page au même moment l'un aura déjà reçu la réponse que l'autre ne l'aura pas encore émise.
Bon, c'est vrai, c'est un cas extrême.
Pour l'être moins, au boulot par exemple, je suis à peu prêt certain que les requêtes mettent 1...10 secondes de plus que chez moi :
- traitement par la machine
- congestion du réseau
- multiples proxy
- analyses en tous genres (antivirus / firewalls / règles de politique interne, ...)

Ca n'explique peut être pas tout. Comme tu le dis il y a tellement d'éléments qui peuvent rentrer en compte.

Tu devrais apporter plus de précisions Clodinfo et pourquoi pas nous indiquer quel est le but final.

De plus, en loggant les appels à cette page, je me retrouve avec des valeurs de microtime dans le désordre, ce qui n'est pas normal.

Peut on voir le code exact qui te permet cela ?


Cordialement,


Kohntark -
Messages postés
6
Date d'inscription
samedi 18 mars 2006
Statut
Membre
Dernière intervention
27 février 2010

Merci pour vos réponses

Le but est d'avoir un timestamp unique pour un chat et de pouvoir ordonner les messages dans l'ordre chronologique.

Je crée donc un identifiant (a priori) unique :
$sec=explode(" ",microtime());
$date=$sec[1]*10000+intval($sec[0]*10000);

Je range ensuite les posts dans une base mySQL avec $date comme identifiant. Toute cette partie fonctionne parfaitement.

Le problème, c'est que, parfois, les posts d'une personne précise arrivent systématiquement avec un identifiant postérieur d'une vingtaine de secondes (donc supérieur de 200000 par exemple). Je le vois bien dans la base de données quand il arrive puis je vois ensuite les posts arriver progressivement avec des valeurs inférieures de 15, 10 secondes par exemple, jusqu'à rattraper la valeur de la première personne, ce qui n'est pas possible puisqu'à un moment donné le timestamp délivré par le serveur a été supérieur ...

Je suis en train d'enregistrer chronologiquement toutes les valeurs du timestamp délivré par ma page, histoire d'essayer d'y voir plus clair.
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Hélas, en passant par le téléphone il y a beaucoup de briques techniques sur lesquelles tu ne peux avoir la main. Juste à titre de vérification, tu peux faire le tests de ton 'chat' entre des PC sur ton LAN. Le but est de pouvoir sortir le réseau et le serveur des sources de problèmes. Si tu as toujours ce décalage, là y a un problème. Le résultat sera assez binaire, soit tu peux agir soit tu ne peux pas.. ou alors les deux combinés.. LOL !!
Mais de toi à moi, la saisie de texte sur téléphone est ergonomiquement plus lente donc un décalage est 'acceptable'. Par contre il faudrait estimer le degré d'acceptabilité et la fréquence de tes décalages. Si tu as un décalage de 20s en moyenne toutes les 30min, ça se tient.
En tout cas l'essentiel est déjà d'isoler les sources de lenteur, après on verra..LOL !!
S.
Messages postés
6
Date d'inscription
samedi 18 mars 2006
Statut
Membre
Dernière intervention
27 février 2010

Merci pour vos réponses.

Les personnes se synchronisaient au téléphone vocalement, donc pas de souci technique. Cela semble durer le temps d'une session, l'un des utilisateurs étant systématiquement décalé de x secondes par rapport aux autres.

J'ai fait un code très simple :
[b]<?php header("Cache-Control: no-cache, must-revalidate"); header("Expires: Fri, 01 Jan 2010 00:00:00 GMT");
file_put_contents("fichier.txt",date("YmdHis")."\r\n",FILE_APPEND); ?>/b

Et voilà ce que ça donne quand j'ai le problème :
[list]20100119194312 Utilisateur 1
20100119194317 Utilisateur 1
20100119194323 Utilisateur 1
20100119194335 Utilisateur 2
20100119194337 Utilisateur 2
20100119194328 Utilisateur 1
20100119194338 Utilisateur 2
20100119194333 Utilisateur 1
20100119194343 Utilisateur 2
20100119194338 Utilisateur 1
20100119194349 Utilisateur 2
20100119194343 Utilisateur 1
20100119194348 Utilisateur 1
20100119194359 Utilisateur 2
20100119194400 Utilisateur 2
20100119194402 Utilisateur 2
20100119194353 Utilisateur 1/list
La date serveur de l'utilisateur 2 est en avance d'une dizaine de secondes sur celle de l'utilisateur 1 ... incompréhensible !
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Et tu es bien à iso-configuration entre les deux utilisateurs ?
- Téléphone (Marque, modèle, firmware du téléphone)
- Réseau et opérateur
- Lieu
Tu n'as pas de système de verrou sur le fichier, ou dans une base que tu utiliserais ? ou un système de file d'attente ou de queue ? Ou alors une gestion par thread ?
Peut-être y'a t il un souci pour qu'un élément de programmation rende la main pour poursuivre le traitement.
S.
Messages postés
6
Date d'inscription
samedi 18 mars 2006
Statut
Membre
Dernière intervention
27 février 2010

J'ai eu l'occasion d'en parler avec quelqu'un qui a probablement trouvé l'explication : cette page étant en hébergement mutualisé, elle était probablement hébergée sur plusieurs serveurs en load-balancing et l'un d'eux n'était probablement pas à la même heure que les autres et avançait de 10 à 20 secondes, ce qui explique que certains utilisateurs n'avaient pas la même heure que les autres ...
Messages postés
2381
Date d'inscription
lundi 4 février 2002
Statut
Membre
Dernière intervention
29 décembre 2012
16
Ahh.. Pourquoi pas mais je trouve ça bizarre de ne pas synchroniser les serveurs d'un même réseau ou cloud.
Tu peux essayer de demander à ton hébergeur. Et tu ne peux pas faire des tests depuis un seul et unique server ?
S.