|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 21 ![]() |
Bonjour à tous,
Voilà un problème m'ennuie depuis un petit moment et porte sur le nombre "d'instances" d'un script que peut exécuter un utilisateur à la fois. Je prends l'exemple d'un script très simple qui comporte ce code : Code :
Il n'y a pas ce problème lorsque j'utilise 2 navigateurs différents, les scripts sont parallèles.... Finalement, ma question, c'est que j'aimerais savoir d'où cela vient, est-ce au niveau d'Apache ? de PHP ? Est-ce que j'me trompe ou est-ce que c'est "problème" connu ? Merci bien... |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
Si tu as une exécution parallèle sur 2 navigateurs différents, je pense que le problème vient du navigateur.
Pour info, FF a de nombreux paramètres réglables dans about:config Par exemple : network.http.max-connections network.http.max-connections-per-server network.http.max-persistent-connections-per-proxy network.http.max-persistent-connections-per-server
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 21 ![]() |
Citation:
Mais effectivement, le parallélisme est bien là si je lance le script en parallèle dans 2 navigateurs différents en même temps, ils durent chacun 10 secondes. Dans le même navigateur, le 2è script ne démarre qu'à partir de la fin du premier. Je ne comprends pas
|
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
Ok
Lors d'une communication entre un navigateur et un site web, plusieurs choses se passent : * Le navigateur ouvre un port (local) pour communiquer avec le site web * Le navigateur envoie une requete HTTP sur le port 80 du site web * Le serveur web (en général Apache) recoit la requete HTTP. * Comme il doit servir au plus vite les autres requetes, il créé un nouveau thread qui se charge de répondre a la requete et revient dans une boucle d'attente sur le port 80. Il est possible (bien que je n'ai jamais entendu parler de ca, mais je suis pas un pro de la configuration apache ^^) que l'une des hypotheses suivantes soient vraies : * Le serveur web associe un thread par couple client/port. Tant que le 1er n'est pas libéré, la requete suivante ne peux avoir lieu. * Le serveur web ouvre une ressource (log, session, etc...) lors d'une connection d'un client (client identifié par IP, numéro de port, etc...) et la maintient ouverte jusqu'a la fin de la requete Dans tout les cas, ca me parait quand même étrange ton histoire. Je vois mal Apache configuré pour ne pas paralleliser les appels. Quand tu charges une page, tu télécharges les différents éléments de la page HTML en parallèle. Les images, les animations flashs, etc... sont toutes demandée au serveur dans des threads différents. L'autre possibilité est que le blocage se situe uniquement au niveau de PHP, mais là encore, c'est inédit pour moi. Pourquoi PHP serait appelé de manière séquentielle ? Si tu veux tester plus simplement, tu peux aussi créer une page avec 2 iframes qui pointent vers le meme script PHP. En principe les 2 iframes devraient s'afficher a peu pres en meme temps et non avec 10s de décalage.
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Inscription : janvier 2004 Messages : 1 238 ![]() |
La doc PHP apporte une réponse ^^
http://fr.php.net/manual/fr/function.sleep.php#96592 Le sleep est global a la session PHP ! essaye de mettre session_write_close() avant ton sleep(), ca devrait résoudre le problème.
__________________
PHP : Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production) Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error()); Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable. Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/ |
|
|
00
|
|
|
#6 | |
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 21 ![]() |
Citation:
http://fr.php.net/manual/fr/function...lose.php#96982 Apparemment le commentaire de cette personne explique exactement mon problème donc tu as raison c'est bien un problème de session ! |
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : janvier 2009 Messages : 21 ![]() |
Bon et bien je te remercie pour tout ça c'est effectivement ça le problème et un session_write_close() bien placé résoud tous les problèmes
Encore merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com