Page 1 sur 1

Problème de socket persistante avec plusieurs scripts

Posté : 04 janv. 2007, 17:16
par inzemix
Bonjour,

Je souhaite réaliser une application en php qui se connecte à un serveur de jeu.

Pour celà, je crée une première page qui se connecte au serveur de la sorte :
?php
        session_start();
        $_SESSION['port'] = 9999;
        $_SESSION['ip'] = "localhost";

        //connection au serveur.
        $_SESSION['serv']=pfsockopen($_SESSION['ip'],$_SESSION['port']);

        fwrite($_SESSION['serv'],"listeParties/?;");
        $res=fread($_SESSION['serv'],1024);
        echo "res : $res";
        print('<a href="test.php"> passer à la 2ème page </a><br><br>');

        echo "session :";
        print_r($_SESSION);
?>
La connexion se déroule bien et mon serveur me renvoit bien le message escompté.
Maintenant, je souhaite pouvoir utiliser cette connexion depuis une autre page : test.php dont voici le code :
?php
        session_start();
        echo "session : ";
        print_r($_SESSION);

        fwrite($_SESSION['serv'],"listeParties/?;");
        $res=fread($_SESSION['serv'],1024);

        echo $res;
?>
Cependant, durant l'éxécution de ce script, les erreurs suivantes apparaissent :

Code : Tout sélectionner

Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/tut/test.php on line 6 Warning: fread(): supplied argument is not a valid stream resource in /var/www/tut/test.php on line 7
De plus, print_r($_SESSION) me dit que la variable 'serv' contient 0 en non plus un identifiant de ressource comme sur la page précédente...

Petite précision : je ne peux pas ouvrir plusieurs connexion, car celà serait assimilé à plusieurs clients du côté de mon serveur!

Quelqu'un a-t-il une idée? :D

Merci d'avance à tout ceux qui auront le courage de me répondre!

Posté : 05 janv. 2007, 21:34
par inzemix
vraiment personne pour un coup de main ou quelques indications?! :oops:

Posté : 05 janv. 2007, 21:48
par fab
le print_r($_SESSION) te dis quoi dans le premier fichier concernant $_SESSION['serv']

Posté : 05 janv. 2007, 21:58
par mojorisin
Salut,
je n'ai pas testé mais je doute que tu puisses mettre une ressource stream en session.
Il te faut réouvrir ta connexion.

Posté : 06 janv. 2007, 12:04
par Invité
le print_r($_SESSION) te dis quoi dans le premier fichier concernant $_SESSION['serv']
Voilà ce que me dit le print_r($_SESSION) après l'interprétation du premier fichier :

Code : Tout sélectionner

['serv'] => Resource id #4
Et lors du second :

Code : Tout sélectionner

['serv'] => 0
Je fais en parallèle des recherches sur internet mais ça ne donne pas grand chose, j'ai juste une piste :
http://www.php.net/manual/fr/function.pfsockopen.php
Sur le troisième commentaire, un développeur fait allusion à SAPI ou ISAPI. Cependant, cet indice ne me parle pas beaucoup plus!

Merci à tout ceux qui ont pris le temps de me lire! :wink:

Posté : 06 janv. 2007, 12:06
par inzemix
désolé, j'ai oublié de me loggué pour le message précédent et du coup, je ne peux pas éditer...
Salut,
je n'ai pas testé mais je doute que tu puisses mettre une ressource stream en session.
Il te faut réouvrir ta connexion.
-> ceci ne m'est pas possible, le serveur sur lequel je me connecte interpréterait cela comme plusieurs clients! :cry:

Posté : 06 janv. 2007, 13:09
par Sung
Bon je boss avec inzemix , c'est des sockets persistantes mais si elle se ferme quand mme à quoi sa sert ?

Posté : 06 janv. 2007, 21:41
par Xenon_54
Le socket est relié au processus Apache et non à la session du client.

Tu peux ouvrir un socket persistent sur une page, voir le visiteur changer de page et le socker resté ouvert et exécuter des requêtes qui prennent plus de temps que le temps de visite normal d'un visiteur.

J'ose dire que c'est la même chose que mysql_pconnect(), la connexion est reliées au processus Apache, pas la session du client.

Posté : 06 janv. 2007, 21:54
par inzemix
Le socket est relié au processus Apache et non à la session du client.

Tu peux ouvrir un socket persistent sur une page, voir le visiteur changer de page et le socker resté ouvert et exécuter des requêtes qui prennent plus de temps que le temps de visite normal d'un visiteur.

J'ose dire que c'est la même chose que mysql_pconnect(), la connexion est reliées au processus Apache, pas la session du client.
Merci bien pour ta réponse!

Existe-t-il un moyen d'utiliser une et même socket pour une session sur plusieurs pages? :?:

Posté : 06 janv. 2007, 21:59
par Xenon_54
Peut-être via cette extension: http://www.php.net/apc
Cependant, je n'ai jamais testé et je ne sais même pas si c'est concrètement possible.

De plus, PHP n'est pas Java. Il n'y a pas de machine virtuelle chargée en mémoire permettant l'échange de données ou le stockage de ce type de variable en mémoire globale.

Posté : 07 janv. 2007, 10:55
par inzemix
merci pour tes réponses!

Je testerai ça en début de semaine prochaine!
Je pense qu'on va devoir se tourner sur un client contenu dans une seule page et utilisant la technologie AJAX.

Posté : 07 janv. 2007, 16:07
par Invité
Merci bien pour ta reponse Xenon_54, on vera si cela marche :)

Posté : 07 janv. 2007, 21:46
par Ajoloca
Bonsoir,

Je ne suis pas sur que ça fonctionne mais j'ai un vague souvenir d'avoir lu qu'on pouvait utiliser les connexions persistantes en mode CGI.
À vérifier, sans aucune garantie.

Posté : 07 janv. 2007, 23:56
par fab
Et sinon tu as vraiment besoin d'une connexion persistante?

Posté : 08 janv. 2007, 14:06
par Sung
Euh... ouais un petit peu, chaque connexion c'est un joueur en simplifié