Problème de socket persistante avec plusieurs scripts

Petit nouveau ! | 5 Messages

04 janv. 2007, 17:16

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!

Petit nouveau ! | 5 Messages

05 janv. 2007, 21:34

vraiment personne pour un coup de main ou quelques indications?! :oops:

ViPHP
fab
ViPHP | 2657 Messages

05 janv. 2007, 21:48

le print_r($_SESSION) te dis quoi dans le premier fichier concernant $_SESSION['serv']
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 217 Messages

05 janv. 2007, 21:58

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.

Invité
Invité n'ayant pas de compte PHPfrance

06 janv. 2007, 12:04

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:

Petit nouveau ! | 5 Messages

06 janv. 2007, 12:06

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:

Petit nouveau ! | 4 Messages

06 janv. 2007, 13:09

Bon je boss avec inzemix , c'est des sockets persistantes mais si elle se ferme quand mme à quoi sa sert ?

Mammouth du PHP | 1885 Messages

06 janv. 2007, 21:41

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.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Petit nouveau ! | 5 Messages

06 janv. 2007, 21: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.
Merci bien pour ta réponse!

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

Mammouth du PHP | 1885 Messages

06 janv. 2007, 21:59

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.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Petit nouveau ! | 5 Messages

07 janv. 2007, 10:55

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.

Invité
Invité n'ayant pas de compte PHPfrance

07 janv. 2007, 16:07

Merci bien pour ta reponse Xenon_54, on vera si cela marche :)

ViPHP
ViPHP | 1961 Messages

07 janv. 2007, 21:46

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

ViPHP
fab
ViPHP | 2657 Messages

07 janv. 2007, 23:56

Et sinon tu as vraiment besoin d'une connexion persistante?
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Petit nouveau ! | 4 Messages

08 janv. 2007, 14:06

Euh... ouais un petit peu, chaque connexion c'est un joueur en simplifié