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

Bibliothèques et frameworks PHP Discussion :

échanger avec un Web Socket en PHP


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 35
    Points : 42
    Points
    42
    Par défaut échanger avec un Web Socket en PHP
    Bonjour,

    J'ai mis en place un Web Socket en me basant sur ce code :

    http://code.google.com/p/phpwebsocke...ket/server.php

    Il fonction très bien, j'arrive à échangé avec depuis mon Client JS.

    Cependant j'aimerais pouvoir échangé avec depuis mon server en PHP.

    J'ai trouvé un debut de solution sur ce topic:

    http://stackoverflow.com/questions/5...ally-using-php

    voici le code du coté de mon server PHP qui va interroger le WebSocket.
    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
    23
    24
    25
    26
    27
    28
    29
     
                    $host = 'localhost';  //where is the websocket server
    		$port = 9876;
    		$local = "http://localhost/";  //url where this script run
     
     
    		$res = array('type' => 'alert', 'action' => "add", 'param'=> array( 'id'=> '2'));
    		$data = json_encode($res) ;
     
    		$head = "GET / HTTP/1.1"."\r\n".
    				"Upgrade: WebSocket"."\r\n".
    				"Connection: Upgrade"."\r\n".
                                    "Origin: $local"."\r\n".
                                    "Sec-WebSocket-Key: asdasdaas76da7sd6asd6as7d"."\r\n". //TODO Key unique
                                    "Host: $host"."\r\n".
                                    "Content-Length: ".strlen($data)."\r\n"."\r\n";
     
    		//WebSocket handshake
    		$sock = fsockopen($host, $port, $errno, $errstr, 2);
     
     
    		fwrite($sock, $head ) or die('error:'.$errno.':'.$errstr);
     
    		$headers = fread($sock, 2000);
     
    		fwrite($sock, "\x00$data\xff" ) or die('error:'.$errno.':'.$errstr);
     
    		$wsdata = fread($sock, 2000);  //receives the data included in the websocket package "\x00DATA\xff"
    		fclose($sock);
    Mais il reste un problème, apparement le mask n'est correct dans le cote ci dessus.
    Le server WebSocket reçoit bien les données mais la function unmask n'arrive pas à les récupérer...

    Quelqu'un voit ce qui cloche dans mon code ?
    Comment générer un mask correct ?

    Je me demande même si je m'y prend correctement pour interrger mon WebSocket en PHP.

    Merci pour votre temps.

    Bonne journée

  2. #2
    Membre du Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 35
    Points : 42
    Points
    42
    Par défaut
    J'ai testé une approche très différente.

    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
    23
    24
    25
    26
    27
     
    		$port		= 9876;
    		$address 	= "localhost"; 
     
    		if (isset($port) and
    				($socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) and
    				(socket_connect($socket, $address, $port)))
    		{
    			$text="Connection successful on IP $address, port $port";
     
     
    			//Des données random format Json
    			$res = array('type' => 'alert', 'action' => "test", 'param'=> array( 'id'=> '2'));
    			$datas = json_encode($res) ;
     
    			if( socket_write( $socket, $datas, strlen($datas)) === false )
    			{
    				echo( "Unable to write to socket:". socket_strerror( socket_last_error() ))  ;
    			}
     
    			//On ferme la connection
    			socket_close($socket);
    		}
    		else
    			$text="Unable to connect<pre>".socket_strerror(socket_last_error())."</pre>";
     
    		echo $text;
    Cette fois ci j'ai l'erreur suivante coté serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    socket_recv(): unable to read from socket [104]: Connection reset by peer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PHP Warning:  socket_recv(): unable to read from socket [104]: Connection reset by peer in /.../serverWebSocket.php
     
    PHP Warning:  socket_getpeername(): unable to retrieve peer name [107]: Transport endpoint is not connected in /..../serverWebSocket.php
    Je ne pense pas que l'erreur soit du coté de mon serveur car lors que je lui envoie des message depuis un client Javascript
    tout fonctionne très bien.

Discussions similaires

  1. [Php 5.3]Script php en lien avec un Web service
    Par bobo27110 dans le forum Langage
    Réponses: 1
    Dernier message: 31/03/2012, 19h36
  2. Réponses: 4
    Dernier message: 14/08/2010, 16h43
  3. [Web Service] Problème avec service web PHP (SOAP)
    Par daemyn dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 18/05/2010, 20h49
  4. [AJAX] Changer la valeur d'un input avec une valeur récupérée en php
    Par leroidje dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/08/2008, 15h12

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