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 :

Rupture d'une connexion Socket


Sujet :

Langage PHP

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Rupture d'une connexion Socket
    Bonjour à toutes et à tous,

    Après de nombreux tests et beaucoup de recherche, je me tourne vers Développez avec l'espoir que peut-être, le problème auquel je suis confronté trouvera sa solution.
    A mon sens, ce problème me semble davantage tenir de l'anomalie que du problème.

    Par pur loisir, j'ai développé une application multi-utilisateurs dont la communication est assurée par un serveur de socket codé en PHP. L'utilisateur s'identifie, le serveur l'enregistre et diffuse l'information à tous les membres connectés. Bref, tout fonctionne à merveille.

    L'anomalie rencontrée est la suivante :
    Selon la documentation PHP, socket_read renvoie FALSE lorsque la tentative de lecture sur une socket échoue. Autrement dit, quand la lecture sur une socket échoue, c'est parce que la connexion a été rompue. Donc que le client a quitté l'application. Concernant mon application, lorsque le client utilise Chrome, le fait qu'il se déconnecte se détecte instantanément. En revanche, lorsqu'il utilise Firefox, un délais variable d'environ 15/20 secondes s'écoule avant que le serveur ne détecte la déconnexion du client.

    Pensez-vous qu'il puisse s'agir d'un comportement du navigateur ? Dans ce cas, pourrait-on imaginer une parade ? Une requête Ajax asynchrone à la fermeture de la page qui serait en charge de forcer la déconnexion ?


    En simplifiant, voici la portion de code qui détecte la déconnexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $buf = @socket_read($this_socket, 2048, PHP_NORMAL_READ);
    if ($buf == false or $buf == '') {		
    	# Le membre vient de se déconnecter, on le supprime du tableau des resources co.
    	unset($sockets_connectes[array_search($this_socket, $sockets_connectes)]);
    	$its_name = array_search($this_socket, $membres_co);
    	unset($membres_co[array_search($this_socket, $membres_co)]);
    	send_message(array_diff($membres_co, array($this_socket)), 'leaving', $its_name);
    	echo 'déco';
    	break;
    }
    ?>
    Au plaisir de discuter.
    Dernière modification par Bovino ; 23/02/2015 à 10h14.

Discussions similaires

  1. Redistribuer une connexion socket dans un réseau, WCF?
    Par zizou100 dans le forum Débuter
    Réponses: 4
    Dernier message: 10/04/2014, 01h51
  2. Relancer une connexion socket
    Par juju1988 dans le forum Windev Mobile
    Réponses: 0
    Dernier message: 13/03/2012, 15h55
  3. Spécifier un répertoire dans une connexion socket
    Par hb2ee dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 16/04/2009, 10h20
  4. Réponses: 20
    Dernier message: 10/07/2006, 16h53
  5. Ouvrir une connexion socket
    Par toure32 dans le forum Langage
    Réponses: 2
    Dernier message: 12/09/2005, 21h22

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