Affichage différent de microtime() d'un poste à l'autre
clodinfo
Messages postés6Date d'inscriptionsamedi 18 mars 2006StatutMembreDernière intervention27 février 2010
-
17 janv. 2010 à 10:06
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 2012
-
27 févr. 2010 à 19:36
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 ...
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 17 janv. 2010 à 12:28
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.
clodinfo
Messages postés6Date d'inscriptionsamedi 18 mars 2006StatutMembreDernière intervention27 février 2010 17 janv. 2010 à 14:22
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 ...
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 17 janv. 2010 à 14:35
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.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 17 janv. 2010 à 15:12
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
clodinfo
Messages postés6Date d'inscriptionsamedi 18 mars 2006StatutMembreDernière intervention27 février 2010 17 janv. 2010 à 17:31
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 ...
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 17 janv. 2010 à 17:59
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.
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 17 janv. 2010 à 18:51
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.
clodinfo
Messages postés6Date d'inscriptionsamedi 18 mars 2006StatutMembreDernière intervention27 février 2010 17 janv. 2010 à 19:51
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.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 18 janv. 2010 à 08:56
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.
clodinfo
Messages postés6Date d'inscriptionsamedi 18 mars 2006StatutMembreDernière intervention27 février 2010 20 janv. 2010 à 22:29
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 !
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 21 janv. 2010 à 09:07
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.
clodinfo
Messages postés6Date d'inscriptionsamedi 18 mars 2006StatutMembreDernière intervention27 février 2010 27 févr. 2010 à 14:28
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 ...
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 27 févr. 2010 à 19:36
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.