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 :

[Réseau] persistance d'une socket en PHP


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 25
    Points
    25
    Par défaut [Réseau] persistance d'une socket en PHP
    bonjour à tous,

    je souhaiterais faire une application ou le client ouvre des sockets en php vers le serveur et avant de commencer je me posais qq questions a propos de ces sockets, je nai pas trouvé de solution avec mon ami google alors je poste ici .

    Tout d abord est ce que la socket existe tjrs apres la fin de l execution du script php qui l a ouverte?
    si Non, comment faire pour qu elle persiste jusqu a ce qu on la ferme volontairement avec un socket_close

    2e question:
    peux t on utiliser le port 80 pour la socket ? ca n induit pas des problemes d'acces avec le browser? et niveau serveur?
    je souhaiterais utiliser le port 80 car il nest pas bloqué en général par les firewalls

    3e question:
    quel difference entre fsockopen et socket_create?
    apparement ca fait la meme chose, quelle methode est preferable?


    voila je debut pour le moment dans le monde de la chaussette alors soyez indulgent
    merci d avance de vos réponses

  2. #2
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    salut<

    question 1:
    tu veux initialisé ton socket au début de ton script et le laisser ouvert tant que tu n'as pas fait socket_close? la durée de vie je ne suis pas certain dsl faudrait que tu fasse des teste

    question 2:
    oui tu peux utiliser le port 80

    question 3:
    fsockopen ouvre une connexion socket du type que tu initialises et le port..ce sont pour les connexion internet
    il y a de beau exemple d'utilisation et p-e tu vas trouver la réponse à ta question 1 dans ceux ci

    socket_create creer un point de communication (une entité) et va te retourner le socket..tu peux l'avoir comme client ou serveur...je crois que ca va etre plus utiliser si tu veux faire par exemple un protocole d'échange de donner..a ce moment tu vas avoir besoin d'un serveur et de client a te connecter sur ce serveur. Or le serveur et les clients vont etre créé à partir de socket_create
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  3. #3
    Membre régulier Avatar de pioule
    Profil pro
    Inscrit en
    Août 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 66
    Points : 97
    Points
    97
    Par défaut
    Pour répondre à ta 1ère question : la socket existe tant que le script est exécuté. Lors de la fermeture du script la socket est détruite.

    Pour la faire persister il faut que tu exécutes ton script en ligne de commande :

    /usr/bin/php5 /ton/chemin/vers/le/script.php 2&>1& par exemple (sous Nux, sous windows je sais pas si c'est possible)

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 46
    Points : 25
    Points
    25
    Par défaut
    merci d avoir répondu
    mais...

    pioule>pour la socket persistante, comment executer le script en ligne de commande a partir du client qui visite le site via un browser?

    ozzmax>j'utilise un serveur de socket (fait en php et qui tourne sur Apache + ubuntu) qui marche tres bien pour les autres ports mais qd je mets le port 80 comme port d ecoute , ca ne fonctionne plus....
    si je fais un 'netstat' pour voir quels ports sont utilisés qd mon serveur de socket n est pas lancé, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Proto   Recv-Q    Send-Q  Local Address    Foreign Address  State       PID
    tcp6       0        0       :::80                :::*       LISTEN       -
    qu'est ce que ca veux dire?

    sinon je n ai tjrs pas tres bien compris la difference entre fsockopen et socket_create, je dois etre un peu neuneu , pourrais tu me reexpliquer plus clairement...

    merci

  5. #5
    Membre régulier Avatar de pioule
    Profil pro
    Inscrit en
    Août 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 66
    Points : 97
    Points
    97
    Par défaut
    A mon avis, tu ne peux pas utiliser le port 80 pour tes sockets si c'est le port utilisé par Apache.

    Sinon au niveau de la persistance, j'ai un script "serveur.php" que j'ai lancé depuis ma machine serveur avec une ligne de commande du même type que celle que je t'ai donnée plus haut. Ce script ne gère que les échanges de données et les éventuelles MAJ de la DB. Dedans j'ai entre autres :

    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
     
        //Création de la socket
        $this->socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
     
        //On lie la ressource
        socket_bind($this->socket,$adress,$port) or die($this->destroy(null));
     
        //On écoute
        socket_listen($this->socket);
     
        //Je boucle tant que je n'ai pas de connexion
        while(true)
        {
            $this->client=socket_accept($this->socket);
            $this->read_write(); //Fonction qui va lire et écrire dans la socket
        }
    (je m'étais amusé à le faire en POO, chose que j'ai pas faite depuis quelques années )

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/09/2007, 21h59
  2. Comment définir un timeout sur une socket PHP ?
    Par N3odyme dans le forum Langage
    Réponses: 7
    Dernier message: 07/05/2006, 23h04
  3. [Tableaux] Envoyer de l'hexa via une socket PHP
    Par N3odyme dans le forum Langage
    Réponses: 2
    Dernier message: 06/05/2006, 19h34
  4. [sockets]Comment intéragir avec une socket php ?
    Par le Daoud dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 31/10/2005, 10h50
  5. [Réseau] plusieurs flux a partir d'une socket
    Par al85 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 27/01/2005, 18h11

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