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

JavaScript Discussion :

[Article] Un chat en HTML5 avec les websockets [API HTML5]


Sujet :

JavaScript

  1. #1
    R�dacteur

    Homme Profil pro
    Responsable de projet
    Inscrit en
    Mai 2009
    Messages
    634
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France

    Informations professionnelles :
    Activit� : Responsable de projet
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 634
    Par d�faut [Article] Un chat en HTML5 avec les websockets
    Bonjour � tous,

    voici un tutoriel sur la cr�ation d'un chat en HTML5 s'appuyant sur les websockets.
    Comme d'habitude, n'h�sitez pas � faire part de vos remarques et questions � la suite de ce message.

    un chat en HTML5 avec les websockets

    Merci!

  2. #2
    Membre averti
    Profil pro
    D�veloppeur Web
    Inscrit en
    F�vrier 2009
    Messages
    46
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur Web

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 46
    Par d�faut
    Bonjour

    Tr�s bon tutoriel merci.
    C'est plus un exemple concret d'utilisation, mais il me convient tr�s bien !

  3. #3
    Membre tr�s actif
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mai 2002
    Messages
    277
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 277
    Par d�faut Come back
    Bonjour,

    Pas mal, mais on peut d�j� faire cela avec une applet java.
    Sinon, le principale probl�me c'est que je doute que cela passe via un proxy, ce qui avantage ajax et le http en g�n�ral.
    De plus, on peut facilement crypt� les donn�es en https via ajax, mais la il faut reimpl�menter le cryptage dans la connexion par socket.
    Le gain de vitesse due � l'absence d'ent�te HTTP est-il vraiment cons�quent ?

    J'ai l'impression que l'on revient de plus en plus � ce qui se faisait avant. On est parti des sockets TCP, on a ajout� une couche http, puis on est pass� par ajax (qui n'est rien d'autre que le fait d'envoyer des requ�tes http en javascript) pour maintenant revenir aux socket TCP...

    Cordialement.

  4. #4
    Mod�rateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par d�faut
    Citation Envoy� par Lovmy Voir le message
    Pas mal, mais on peut d�j� faire cela avec une applet java.
    Euh ? Possible... Dans ce cas, �a peut s�rement aussi se faire en Flash et en SilverLight. Avec dans les 3 cas l'inconv�nient de devoir int�grer son HTML avec ces technologies, alors qu'on s'en passerait bien. HTML5 inclut les WebSockets, la mani�re de l'int�grer fait partie de lui.

    Citation Envoy� par Lovmy Voir le message
    Sinon, le principale probl�me c'est que je doute que cela passe via un proxy, ce qui avantage ajax et le http en g�n�ral.
    Il y en a pas mal avec lesquels �a passe pas. Mais si les websockets se r�pandaient, les proxies seraient oblig�s d'�voluer pour les g�rer.

    Citation Envoy� par Lovmy Voir le message
    De plus, on peut facilement crypt� les donn�es en https via ajax, mais la il faut reimpl�menter le cryptage dans la connexion par socket.
    ws:// pour le non-crypt�, wss:// pour une connexion TLS -_-�. Ils sont pas deubeux, hein...

    Citation Envoy� par Lovmy Voir le message
    Le gain de vitesse due � l'absence d'ent�te HTTP est-il vraiment cons�quent ?
    �a va bien au-del� de �a. Une socket est une communication bidirectionnelle entre le client et le serveur, qui reste ouverte. Il peuvent se parler l'un � l'autre � tout moment.

    Quand le serveur re�oit de nouveaux message, il peut les pousser imm�diatement � tous les clients, de sa propre initiative.
    Avec HTTP, qui ne permet qu'aux clients de parler au serveur et pas l'inverse, il n'y a que deux fa�ons de le faire :
    -#1 Le client demande toutes les deux secondes au serveur s'il n'y a pas de nouveaux messages. Franchement, les routeurs n'ont pas que �a � foutre.
    -#2 Le serveur renvoie un flux de longueur infinie, et quand il n'a rien � envoyer, il dit simplement que le reste est en cours de transmission, jusqu'� ce qu'il ait quelque chose � envoyer. La cha�ne d'outils pr�vue pour HTTP n'est pas du tout habitu�e � �a et �a pose plein de probl�mes. Bien s�r, en th�orie c'est pas plus facile de faire g�rer un nouveau protocole qu'une nouvelle fa�on de traiter certaines connexions HTTP. Mais en pratique, �a s�pare les choses plus clairement, et puis, de toute fa�on, ce truc n'est qu'un bricolage pour pallier l'absence de sockets.

    Bref, le gain, c'est d'�viter de faire des allez-et-retour inutiles, et de mani�re g�n�rale, de g�rer la communication client-serveur comme elle doit l'�tre, �vitant ainsi de jeter la confusion (et donc la malfonction) dans les outils.

    Citation Envoy� par Lovmy Voir le message
    J'ai l'impression que l'on revient de plus en plus � ce qui se faisait avant. On est parti des sockets TCP, on a ajout� une couche http, puis on est pass� par ajax (qui n'est rien d'autre que le fait d'envoyer des requ�tes http en javascript) pour maintenant revenir aux socket TCP...
    Oui. Le web et le monde �volue, les objectifs de d�part �taient assez simples et suffisants, mais dans le tout-multim�dia on repense les choses, tout en appr�ciant le web existant et en refusant de le jeter d'un coup.
    L'�volution est tent�e � petits pas, avec compatibilit� ascendante.
    Plus tard, on peut tout-�-fait imaginer que les sites webs communiqueront avec un navigateur avec une seule connexion bidirectionnelle type websocket pour tous les besoins, envoyant selon les demandes des pages HTML ou ce qui doit y �tre ajout�/enlev�/remplac�.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    10
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Par d�faut test sous Firefox
    Bonjour Messieurs,

    Est-ce que l'un d'entre vous a test� ce script sous Firefox ? Apr�s avoir au pr�alable modifi� l'appel client webSocket en :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    if(window.MozWebSocket)
          WebSocket=window.MozWebSocket
    J'ai la version 8, websocket activ� par d�faut.
    Globalement � chaque fois que j'essaye de dev/tester un script faisant appel aux websockets les r�sultats entre FF et Chrome vont toujours dans le sens de Chrome. Presque � chaque fois Firefox ferme le socket au bout de quelques secondes...

    Des id�es ?

    Merci.

  6. #6
    Invit� de passage
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1
    Par d�faut Firefox
    Bon alors, pour commencer, oui FF pr�fixe le websocket. J'ai donc ajouter en d�but du script websocket.js la ligne suivante pour compatibilit� :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    window.WebSocket = window.WebSocket || window.MozWebSocket;
    Par contre, le client ne fonctionne pas, et c'est g�n�ral � tous les exemples que j'ai essay�s.
    Firebug me renvoie :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    Firefox ne peut établir de connexion avec le serveur à l'adresse ws://localhost:11345/serveur.php
    Voici le log de la console :
    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
    30
    31
    32
    33
    34
    35
    Server Started : 2011-11-25 14:44:58
    Master socket  : Resource id #5
    Listening on   : localhost port 11345
     
    Resource id #6 CONNECTED!
     
    Requesting handshake...
    GET /serveur.php HTTP/1.1
    Host: localhost:11345
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Connection: keep-alive, Upgrade
    Sec-WebSocket-Version: 8
    Sec-WebSocket-Origin: http://localhost
    Sec-WebSocket-Extensions: deflate-stream
    Sec-WebSocket-Key: y/5oYNSQLP7IEipzpa1P7w==
    Cookie: PHPSESSID=km8t3le1ajm9ejt5spagknep51; connexion[alias]=cedrik; connexion[profiluser]=mediaadmin; connexion[accueil]=%2Fmain%2Fservices.php5; connexion[alarmes]=0; connexion[tchat]=1
    Pragma: no-cache
    Cache-Control: no-cache
    Upgrade: websocket
     
     
    Handshaking...
    HTTP/1.1 101 WebSocket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    Sec-WebSocket-Origin: http://localhost
    Sec-WebSocket-Location: ws://localhost:11345/serveur.php
     
    )0(+r����4�V�I
    Done handshaking...
    Resource id #6 DISCONNECTED!
    J'imagine que c'est un probl�me de firefox ???

    Si quelqu'un peut m'aider : merci !

    C�drik

  7. #7
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : Tha�lande

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par d�faut
    Je n'arrive pas non plus � faire fonctionner le script donn� que ce soit sous Firefox (patch� avec window.WebSocket = window.WebSocket || window.MozWebSocket; ) ou sous Chrome

    Meme probleme que cedk06 �a se termine en
    Resource id #6 DISCONNECTED!

    Lorsque le client ouvre la page.

  8. #8
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par d�faut chat en html5
    Je d�sesp�re de faire fonctionner ce chat.
    Le serveur se lance ; mais, je ne peux pas envoyer de message.
    J'ai t�l�charg� le package.
    Apr�s un essai infructueux avec Wamp.
    J'utilise xamp. et le navigateur Chrome.
    J'attends de l'aide.
    Merci.

  9. #9
    Mod�rateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par d�faut
    Citation Envoy� par floysand Voir le message
    J'attends de l'aide.
    Tu vas l'attendre longtemps, tu n'as m�me pas dit quel est le probl�me.

    "Je ne peux pas envoyer de message" mais encore ? �a bloque o�, de quel c�t� et � quelle couche ? Comment tu le sais ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre confirm�
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    112
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 112
    Par d�faut
    Bonjour tout le monde,

    D�j�, merci pour le tutoriel mis en ligne !!!

    Sinon, j'ai un peu la m�me chose que cedk06 avec Chrome 16 :
    Resource id #9 CONNECTED!

    Requesting handshake...
    GET /serveur.php HTTP/1.1
    Upgrade: websocket
    Connection: Upgrade
    Host: localhost:11345
    Origin: http://127.0.0.1
    Sec-WebSocket-Key: pgQ4I91u7XPWP2RAVffdmg==
    Sec-WebSocket-Version: 13


    Handshaking...
    HTTP/1.1 101 WebSocket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    Sec-WebSocket-Origin: http://127.0.0.1
    Sec-WebSocket-Location: ws://localhost:11345/serveur.php

    )0(+r�↑���⌂4�V�I
    Done handshaking...
    Resource id #9 DISCONNECTED!
    Est-ce que quelqu'un sait d'o� viennent ces hi�roglyphes et pourquoi �a se d�connecte aussi t�t ?

    Merci !!

    =========================================================

    J'�dite pour rajouter des infos.
    Avec l'inspector de Google Chrome et en rajoutant des logs ici et l�, il me semble voir apparaitre une erreur o� Chrome signale ne pas trouver le Sec-WebSocket-Accept; et juste apr�s �a d�connecte.

    Alors j'ai �dit� le fichier WebSocketHandshake.class.php pour rajouter la ligne du Sec-WebSocket-Accept en rapport � la valeur de Sec-WebSocket-Key. Et depuis, Chrome dit que �a matche pas. Pourtant, j'ai bien respect� la le descriptif de l'IETF (section 5.2.2.3.2).
    Voir aussi la RFC 6455 [Page 7].

    Voici la nouvelle portion de code pour le constructeur de la classe WebSocketHandshake :
    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
    public function __construct($buffer) {
            $resource = $host = $origin = $key = $key1 = $key2 = $protocol = $code = $handshake = null;
            preg_match('#GET (.*?) HTTP#', $buffer, $match) && $resource = $match[1];
            preg_match("#Host: (.*?)\r\n#", $buffer, $match) && $host = $match[1];
            preg_match("#Sec-WebSocket-Key: (.*?)\r\n#", $buffer, $match) && $key = $match[1];
            preg_match("#Sec-WebSocket-Key1: (.*?)\r\n#", $buffer, $match) && $key1 = $match[1];
            preg_match("#Sec-WebSocket-Key2: (.*?)\r\n#", $buffer, $match) && $key2 = $match[1];
            preg_match("#Sec-WebSocket-Protocol: (.*?)\r\n#", $buffer, $match) && $protocol = $match[1];
            preg_match("#Origin: (.*?)\r\n#", $buffer, $match) && $origin = $match[1];
            preg_match("#\r\n(.*?)\$#", $buffer, $match) && $code = $match[1];
            $this->__value__ =
                "HTTP/1.1 101 WebSocket Protocol Handshake\r\n".
                "Upgrade: WebSocket\r\n".
                "Connection: Upgrade\r\n".
    			"Sec-WebSocket-Accept: ".base64_encode (SHA1 ($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11"))."\r\n".
                "Sec-WebSocket-Origin: {$origin}\r\n".
                "Sec-WebSocket-Location: ws://{$host}{$resource}\r\n".
                ($protocol ? "Sec-WebSocket-Protocol: {$protocol}\r\n" : "").
                "\r\n".
                $this->_createHandshakeThingy($key1, $key2, $code)
            ;
        }
    J'ai pas plus d'id�es pour le moment ... Et vous ?

  11. #11
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par d�faut Un chat en HTML5 avec les websockets
    J'ai exactement le m�me probl�me, les m�mes messages que sergeh.

    Je lance le serveur dans une fen�tre Windows en mode console.

    Resource id #6 CONNECTED!
    ....
    Resource id #6 DISCONNECTED!

    Je lance ensuite l'application sous le navigateur Chrome.
    Lorsque je tape un pseudo, j'ai le message :
    websocket init

    Lorsque j'�cris un message dans la zone de saisie en bas et que je valide, j'ai le message :
    websocket message send

    Mais, en fait, rien ne se passe. Le message n'appara�t pas dans la fen�tre centrale. C'est normal, le serveur s'est d�connect� !
    D'autre part, je souhaiterais avoir deux fen�tres pour dialoguer ; mais, je n'y arrive pas.
    J'attends de l'aide.
    Merci d'avance.

  12. #12
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par d�faut Un chat en HTML5 avec les websockets
    Ce tutoriel sur la cr�ation d'un chat en HTML5 avec les websockets m'a beaucoup int�ress� ; il est bien expliqu�.
    Cette id�e me plaisait ; mais, je bloque toujours ; j'ai le serveur qui se lance puis se d�connecte.
    Au niveau du client, je tape des messages, mais ils ne sont pas envoy�s.
    Quelqu'un a-t-il r�ussi � le faire fonctionner.
    Sur quelle plateforme ?
    Je suis sur Windows XP, avec serveur Apache, navigateur Google chrome.
    Merci pour votre collaboration.

  13. #13
    Membre habitu�
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    12
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 12
    Par d�faut Un chat en HTML5 avec les websockets
    Quelqu'un a-t-il r�ussi � faire fonctionner ce chat ?
    Merci de votre r�ponse.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Par d�faut
    Bonjour, merci pour ce tuto mais j'ai aussi le m�me probl�me sous chrome qui me dit dans la console:
    Error during WebSocket handshake : 'Sec-WebSocket-Accept' header is missing

    Alors bon un petit up pour faire avancer le schimlblik car vraiment la possibilit� de faire du push dans mon appli serait la bienvenue et r�volutionne � mon sens le web.
    Sinon je vais �tre oblig� de me rabattre sur un appel ajax toutes les x secondes et pis c'est vraiment pas �l�gant !

    maj: je vous livre le contenu de la console du serveur lors de l'affichage du client
    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
     
    D:\wamp\bin\php\php5.2.6>php -q d:\wamp\www\cerf\Tests1\websockets\classes\serveur.php
    Server Started : 2012-02-23 14:37:05
    Master socket  : Resource id #5
    Listening on   : 192.168.0.1 port 11345
     
    Resource id #6 CONNECTED!
     
    Requesting handshake...
    GET /Tests1/websockets/classes/serveur.php HTTP/1.1
    Upgrade: websocket
    Connection: Upgrade
    Host: 192.168.0.1:11345
    Origin: https://intranet
    Sec-WebSocket-Key: r7cTcNUADjYhZj1cIxqo2Q==
    Sec-WebSocket-Version: 13
     
     
    Handshaking...
    HTTP/1.1 101 WebSocket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    Sec-WebSocket-Origin: https://intranet
    Sec-WebSocket-Location: ws://192.168.0.1:11345/Tests1/websockets/classes/serveur.php
     
    )0(+rþ↑ø»Ï⌂4¢VÂI
    Done handshaking...
    Resource id #6 DISCONNECTED!

  15. #15
    Invit� de passage
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Par d�faut
    Je me permet de faire remonter ce topic puisque j'ai les m�mes soucis que les messieurs du dessus, � savoir une d�connexion du websocket pr�coce .

    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
    30
    Server Started : 2012-05-18 06:23:12
    Master socket  : Resource id #5
    Listening on   : 127.0.0.1 port 11345
     
    Resource id #6 CONNECTED!
     
    Requesting handshake...
    GET /serveur.php HTTP/1.1
    Upgrade: websocket
    Connection: Upgrade
    Host: 127.0.0.1:11345
    Origin: http://127.0.0.1
    Sec-WebSocket-Key: 8vaY4w9GmozX/NeUczI4Ng==
    Sec-WebSocket-Version: 13
    Sec-WebSocket-Extensions: x-webkit-deflate-frame
    Cookie: __utma=96992031.956632088.1337304628.1337304628.1337304628.1; __utmc=969
    92031; __utmz=96992031.1337304628.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(no
    ne)
     
     
    Handshaking...
    HTTP/1.1 101 WebSocket Protocol Handshake
    Upgrade: WebSocket
    Connection: Upgrade
    Sec-WebSocket-Origin: http://127.0.0.1
    Sec-WebSocket-Location: ws://127.0.0.1:11345/serveur.php
     
    )0(+rþ↑ø»Ï⌂4¢VÂI
    Done handshaking...
    Resource id #6 DISCONNECTED!
    EDIT : Bon, apr�s avoir trifouill� le code et mis quelques indicateurs pour d�bugger le tout je n'arrive pas � grand chose si ce n'est avoir compris que la boucle qui sert d'�coute s'arr�te � la valeur de 0 de la variable $bytes.
    Ce qui se produit imm�diatement apr�s la connexion puisque rien n'est envoy� dans l'imm�diat.

    c'est cette partie du code de serveur.php :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    		else
    		{
    			$bytes = @socket_recv($socket,$buffer,2048,MSG_WAITALL);
    			if(empty($bytes))
    			{ 
    			console($bytes);
    			//disconnect($socket);
    			}
    Ici j'ai comment� la fonction qui appel la d�connexion et j'affiche la valeur de $bytes. J'obtiens alors une premi�re it�ration de valeur 241 puis une boucle infini qui affiche 0.

    Le truc c'est que si je tente d'utiliser le chat, normalement des donn�es devrais circuler mais rien ne se produit. J'en viens � me demander si le probl�me ne viens pas du .js

    Bref, voil� mon avis de grand d�butant.

  16. #16
    Nouveau candidat au Club
    Inscrit en
    Mai 2006
    Messages
    2
    D�tails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 2
    Par d�faut
    Bonjour,

    J'ai r�ussie � le faire fonctionner.
    Alors pour le serveur faut prendre la nouvelle version ici et t�l�charger chatbot.demo.php ainsi que websocket.class.php

    Ensuite renommer le chatbot.demo.php en server.php puis rajouter ces lignes :
    Code php : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    foreach ( $this->users as $utilisateur ){
    	$this->send($utilisateur->socket,$msg);
    }
    retirer le case et mettre le bon port 11345.
    Ce qui nous donne :
    Code php : 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
    #!/php -q
    <?php
    // Run from command prompt > php -q chatbot.demo.php
    include "websocket.class.php";
     
    // Extended basic WebSocket as ChatBot
    class ChatBot extends WebSocket{
      function process($user,$msg){
     
        $this->say("< ".$user->socket." :".$msg);
     
     
          // case "date" : $this->send($user->socket,"today is ".date("Y.m.d")); 
    	foreach ( $this->users as $utilisateur ){
    		$this->send($utilisateur->socket,$msg);
    	}
      }
    }
    $master = new ChatBot("localhost",11345);

    Avec ff 13.0.1 j'ai eu des probl�me de portabilit�s de variable. J'ai donc dupliqu� les lignes suivantes dans websocket.js
    Code javascript : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    var button = document.getElementsByClassName('sii-chat-send')[0]; /* bouton d'envoi du message */
    var buttonUser = document.getElementsByClassName('sii-chat-login')[0]; /* bouton de soumission du pseudo */
    var messageInput = document.getElementsByName('sii-chat-message')[0]; /* message à envoyer vers le serveur */
    var contentMessage = document.getElementsByClassName('sii-chat-content')[0]; /* div contenant les messages reçus par le serveur*/

    �a fonctionne, mais j'ai remarqu� un bug � la fermeture de l'onglet de FF. �a envoie un code 0x3e9 qui se fait broadcaster par tous les clients connect�s sur le m�me ws et les d�connecter. La solution temporaire pour le moment c'est de conditionner les messages et sortir de la fonction process si le message est �gale au code hexa 3e9.

    ++

  17. #17
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    183
    D�tails du profil
    Informations personnelles :
    �ge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 183
    Par d�faut
    Bonjour, j'utilise le serveur du post si dessus

    Tout marche bien pour l'envoie et la r�ception de donn�es, mais parfois le retour des donnes me donne des caract�re bizzare dans la console et ferme la connexion au serveur.
    Je peut avoir plusieurs 10 ene de retour corecte et d'un coup paf, des caract�res bizare.

    l'erreur que j'ai en retour sur Firbug :

    Citation Envoy� par La console Firbug
    SyntaxError: JSON.parse: end of data after property value in object
    [Stopper sur une erreur]
    e = JSON.parse(e.data);
    en faite de temps en temps il manquerais une ou deux accolade de fermeture, mais je ne voie pas pourquoi car c'est al�atoire (voir la derni�re ligne, il manque 2 accolade (desfois il en maque que une).

    voici le r�sultat de e.data :
    {"action":"latlng","msg":{"from":"dad72","message":"48.07427752144558,0.05524391761264269"}}
    {"action":"latlng","msg":{"from":"dad72","message":"48.07427752144558,0.05511391761262985"}}
    {"action":"latlng","msg":{"from":"dad72","message":"48.07427752144558,0.054983917612617006"}}
    {"action":"latlng","msg":{"from":"dad72","message":"48.07427752144558,0.054983917612617006"}}
    {"action":"latlng","msg":{"from":"dad72","message":"48.07427752144558,0.054853917612604164"}}
    {"action":"latlng","msg":{"from":"dad72","message":"48.07427752144558,0.05472391761259132"
    Voici les r�sultats dans la console (cmd) :

    La le bon r�sultats renvoyer correctement:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    < Resource id #6 :{"action":"ctrl/chat/out", "msg":"{\"from\":\"dad72\", \"message\":\"48.07809172812819,0.05841599510654305\"}"
    {"action":"ctrl/chat/out", "msg":"{\"from\":\"dad72\", \"message\":\"48.07809172812819,0.05841599510654305\"}"len(110)
    La le mauvais r�sultats qui arrive al�atoirement qui devrais �tre la m�me chose que ci dessus normalement :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    < Resource id #6 :+{"a¬tioº":"¬trlµcha¢/ou¢", ÙmsgÙ:"{ò"frªm\\"d¿d72ò", ò"me¦sag¼\":ò"48þ077*617¹812±194Õ0.0³854³995°065³589ò"}"
    +{"a¬tioº":"¬trlµcha¢/ou¢", ÙmsgÙ:"{ò"frªm\\"d¿d72ò", ò"me¦sag¼\":ò"48þ077*617¹812±194Õ0.0³854³995°065³589ò"}"len(112)
     
    Resource id #6 DISCONNECTED!
    Pour information les message sont des coordonnes provenant de google maps que je r�cup�re pour faire des d�placement en temps r�elle des marker pour un jeu en multijoueur.

    de ce que je voie cela viendrais du "socket_recv()" qui renvoie 0 Byte de temps en temps. Pour pr�cision j'envoie des donn�es en masse et al�atoirement il me sort 0 bytes et des caract�re bizzare.

    Quelqu'un a une id�e de quoi �a peut venir ? please help me.

    Si vous voulez la classe c'est ici

    Si vous avez besoin d'autre pr�cision pour mieux m'aider, dite le moi.

    Merci d'avance

  18. #18
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    183
    D�tails du profil
    Informations personnelles :
    �ge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 183
    Par d�faut
    bon, c'est la fonction unwrap qui cause probleme j'ai l'impression.

  19. #19
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2008
    Messages
    183
    D�tails du profil
    Informations personnelles :
    �ge : 49
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : F�vrier 2008
    Messages : 183
    Par d�faut
    bon j'ai corriger le truc en changent de m�thode d�envoi. je n'utilise plus JSON avec les {} mais je s�pare chaque donn�e par un ";" et j'utilise split() au retour des donn�es.

    le r�sultat est mieux, mais j'ai toujours de temps en temps, un mauvais d�codage des donnes. par contre j'ai plus d'ereur parse de JSON (un bug en moins)

    La c'est Ok
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    unwrap dataLength = 50
    Resource id #8 :latlng;dad72;48.06282809235226,0.0603643767212815
    latlng;dad72;48.06282809235226,0.0603643767212815
    len(49)
    La il y a eu un mauvais decodage de la fonction unwrap
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    unwrap dataLength = 1
    Resource id #8 :¦lat▒ng;╣ad7´;48¾062õ580õ235´26,Ý.06Ý364¯767´128ý59
    ¦lat▒ng;╣ad7´;48¾062õ580õ235´26,Ý.06Ý364¯767´128ý59
    len(51)
    Resource id #8 DISCONNECTED!
    Fonction unwrap qui cause probleme :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    function unwrap($data="")
    	{	
    		$bytes = $data;
    		$dataLength = '';
    		$mask = '';
    		$coded_data = '';
    		$decodedData = '';
    		$secondByte = sprintf('%08b', ord($bytes[1]));	
    		$masked = ($secondByte[0] == '1') ? true : false;	
    		$dataLength = ($masked === true) ? ord($bytes[1]) & 127 : ord($bytes[1]);
     
    		$this->say("unwrap dataLength = ".$dataLength);	
     
    			if($masked === true)
    			{
    				if($dataLength === 126)
    				{
    					$mask = substr($bytes, 4, 4);
    					$coded_data = substr($bytes, 8);
    				}
    				elseif($dataLength === 127)
    				{
    					$mask = substr($bytes, 10, 4);
    					$coded_data = substr($bytes, 14);
    				}
    				else
    				{
    					$mask = substr($bytes, 2, 4);	
    					$coded_data = substr($bytes, 6);	
    				}	
    				for($i = 0; $i < strlen($coded_data); $i++)
    				{	
    					$decodedData .= $coded_data[$i] ^ $mask[$i % 4];
    				}
    			}
    			else
    			{
    				if($dataLength === 126)
    				{	
    					$decodedData = substr($bytes, 4);
    				}
    				elseif($dataLength === 127)
    				{	
    					$decodedData = substr($bytes, 10);
    				}
    				else
    				{	
    					$decodedData = substr($bytes, 2);	
    				}	
    			} 
    			return $decodedData;				
    	}	
    }
    Il y a pas quelqu'un qui peut m'aider ?

  20. #20
    Inactif
    Inscrit en
    Juillet 2010
    Messages
    29
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 29
    Par d�faut
    Tr�s bien expliqu�
    Juste une question SVP, comment le mettre en-ligne pour le public, apr�s le transfert de tout les fichiers n�cessaire via FTP?

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. [HTML 5] Un chat en HTML5 avec les websockets
    Par ornitho13 dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 22
    Dernier message: 09/11/2012, 18h14
  2. [Article] Jouons un peu avec les websocket
    Par Bovino dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 05/02/2012, 10h17

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