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 :

Rapidité des Sockets ??? [Tutoriel]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut Rapidité des Sockets ???
    Salut

    j'ai plusieurs appli web et cela nécessite souvent de la ressaisie.

    pour un projet sur le quel je travaille j'ai besoin de garder les données de mon formulaire dans mon appli mai il faudrait que j'alimente aussi une autre appliweb.

    j'utilisais fopen avec l'url de l'application pour lui envoyer des infos en mode GET
    et cela est très rapide.
    mais ce qui marchait en test ne peut être passé en prod car l'application sur laquelle je me connecte utilise une session et le mode POST

    Je suis donc passé au sockets.
    ouverture
    ecriture de l'entête (verbe + cookie + content etc.)
    ecriture des datas
    lecture de la réponse.

    et là c'est extraordinairement lent.

    même la plus simple des requêtes GET / avec 3 octets de réponse sur un serveur local prends du temps alors que la même requête sur le même serveur avec fopen est instantané.

    Si vous avez des idées je suis preneur

    Merci
    A+JYT

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Je dirais que ça vient de ton code.

    À part ça, fopen permet aussi d'envoyer des données en POST (c'est peut-être pour php5 et supérieurs uniquement)

  3. #3
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Si tu utilises le protocole HTTP/1.1 via Socket, tu risques d'avoir des surprises (à cause du Keep-Alive)...

    Si possible, je te conseillerais plutot d'utiliser la librairie Curl, qui gère très bien tout ça.

  4. #4
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    mon code est on ne peu plus simple
    socket_create
    socket_write
    socket_read
    socket_close

    avec une boucle pour tout lire

    je vais voir CURL mais je ne crois pas que le package soit dispos sur mon hébergement

    Merci
    A+JYT

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Tu n'as pas besoin des fonctions sockets a priori, il suffit de fsockopen.
    Je te conseille d'utiliser HTTP_Client de PEAR sinon (bien que je ne le connaisse pas vraiment, il doit être bon)

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    fsockopen est tout aussi lent que socket_create

    A+JYT

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Comme on te l'a déjà dit, il s'agit sûrement de ton code.

  8. #8
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Je ne peux vous mettre la totaloité de mon code
    donc voici les éléments de ma classe qui passent par les sockets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    OPEN :
    	$this->_sock = fsockopen($this->_server, $this->_port, $errno, $errstr, 30);
    	//$this->_sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
     
    WRITE :
    	//socket_write($this->_sock, $this->_writebuffer,strlen($this->_writebuffer)); 
    	fwrite($this->_sock, $this->_writebuffer,strlen($this->_writebuffer));
     
    READ :    
    	$buffer = "";
    	/*while ($data = socket_read ($this->_sock,1024*1024,PHP_BINARY_READ)) {
    		if ($this->db)   debug ("data", $data);
    	  $this->readyState = 3;
    	  $buffer.= $data;
    	}*/
     
    	while (!feof($this->_sock)) {
    	  $data = fread($this->_sock, 8192);
    		if ($this->db)   debug ("data", $data);
    	  $this->readyState = 3;
    	  $buffer.= $data;
    	}
    ce sont trois methodes
    le tout appelé ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $httprequest->open("POST", "http://localhost:8080/dap/Welcom.do");
    $httprequest->setRequestHeader('Connection', 'Keep-Alive');
    $httprequest->setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    $httprequest->setRequestHeader('Accept','*/*');
    $httprequest->setRequestHeader('Cookie',$Cookie);
    $httprequest->send("var1=value1&var2=unautretruc");
    OPen positionne les variables
    serveur port url de l'objet
    setRequestHeader constitue le buffer à écrire
    et send
    ouvre la socket ecrit dedant et lit la réponse.
    il n'y a rien d'autre dans mon code.

    j'ai isolé ce morceau est c'est toujours aussi lent.

    mais je ne pense pas que cela vienne de mon code car voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "GET / HTTP/1.1\r\n";
        $out .= "Host: www.example.com\r\n\r\n";
     
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }
    et beaucoup plus long que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $fp = fopen ("http://127.0.0.1/",'r');
    if (!$fp) {
        echo "Introuvable\n";
    } else {
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }
        fclose($fp);
    }
    A+JYT

  9. #9
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Et sans le feof c'est pas plus rapide ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "GET / HTTP/1.1\r\n";
        $out .= "Host: www.example.com\r\n\r\n";
     
        fwrite($fp, $out);
        while ($data = fread($fp, 2048)) {
            echo $data;
        }
        fclose($fp);
    }

  10. #10
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    ça explique pas la différence entre les deux

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Est-ce que c'est plus rapide ?

  12. #12
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    Et si, ça vient bien de ton code.
    Remplace :
    Par :
    ....

    (ok mon premier message n'était pas clair...)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 16
    Par défaut
    Tu peux essayer la classe PHP "HTTP Class" sur http://www.phpclasses.org/browse/package/3.html
    Elle permet de faire du GET/POST sur HTTP et HTTPS. Tu peux configurer le referer, le user-agent etc...
    Moi je l'utilise pour un emulateur de Navigateur Web, genre pour faire automatiquement toute une série de post de formulaire d'un site (interface admin pour créer automatiquement des emails sous cpanel par exemple)

  14. #14
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Salut à tous

    Bon j'ai trouvé un autre hébergement sur le quel j'ai testé mon code

    appel de ma page php qui ouvre une page html sur le serveur localhost un GET /

    sous windows j'ouvre l'url de ma page php
    j'ouvre un autre navigateur
    j'ouvre lurl du serveur linux
    la page html demadé par le serveur linux s'affiche
    j'active la fenêtre de mon navigateur qui tente d'ouvrir la page php sous windows
    j'attends un peu et la page arrive enfin.

    bref sous linux la rémonse est instantanée sous windows le délai est suffisant pour qu'une client trouve ça trop long et ferme la page.

    ce n'est donc pas un pb de code mais un pb de plateforme ou peut être de conf

    merci de votre aide.
    A+JYT

  15. #15
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par snakes
    Tu peux essayer la classe PHP "HTTP Class" sur http://www.phpclasses.org/browse/package/3.html
    merci je teste

  16. #16
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    j'ai l'impression de poster dans le vide des fois...

  17. #17
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    non non kioob je t'ai lu

    merci

  18. #18
    Membre émérite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par défaut
    moarf

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Par défaut
    La solution de Kioob à marché pour moi, passé de
    5.0911221504211
    à
    0.37651300430298
    secondes

Discussions similaires

  1. Chat basé sur des sockets php5
    Par javhost dans le forum Développement
    Réponses: 1
    Dernier message: 12/07/2005, 17h21
  2. Réponses: 2
    Dernier message: 12/10/2004, 14h04
  3. connection/deconnection des sockets
    Par yotasse dans le forum Développement
    Réponses: 3
    Dernier message: 17/02/2004, 13h08
  4. probleme de gestion de clients avec des sockets....
    Par ludvo dans le forum Réseau
    Réponses: 6
    Dernier message: 25/09/2003, 13h37
  5. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 19h24

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