IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

parallélisme de scripts ? [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut parallélisme de scripts ?
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    sleep(10);
    echo "coucou";
    ?>
    Je lance ce script dans un premier onglet de mon navigateur. A la moitié (5sec), je relance le même dans un second onglet et donc de façon parallèle au premier. En faisant ceci, je m'aperçois que le script du 2è onglet dure 15 secondes et non 10 secondes, autrement dit, il ne débute que lorsque le premier a été traité !

    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...

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    Citation Envoyé par Fladnag Voir le message
    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
    J'ai le problème pour tous les navigateurs (IE, FF et chrome) quand je lance le script en parallèle via leurs onglets ou via une nouvelle fenêtre. Pourtant ils sont tous configurés assez haut dans le nombre maximum de connexions http, en tout cas loin d'être limité à 1 seule connexion

    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

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    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.

  5. #5
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 21
    Par défaut
    Citation Envoyé par Fladnag Voir le message
    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.
    EDIT :

    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  2. Script et XMLmodule
    Par Ph. B. dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/01/2003, 16h10
  3. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42
  4. Réponses: 2
    Dernier message: 11/07/2002, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo