Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Points particuliers > Comment utiliser les sockets avec php ? Comment faire un chat avec les sockets ? > Partie pratique : la création du chat > Récapitulation, le code > Lecture des commentaires

Récapitulation, le code

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Pseudo Commentaire
Page : 1 
Hors ligne Aoemaster # Posté le 16/05/2006 à 22:50:47 - Ce membre a mis la note : 13
Avatar
Groupe : Bannis
j'ai mi 13 car on ne voit pas le résultat a la fin
si tu pouvais nous mettre le chat en test pour voir, ce serai bien...

Aimer quelqu'un c'est lui donner le pouvoir de vous détruire.
 
Hors ligne NarTy # Posté le 17/05/2006 à 18:27:02 - Ce membre n'a pas mis de note
Je t'aime amèrement !
Avatar
Groupe : Bannis
Bah ... Franchement c'est imcomprehensilble !

Venez jouer
Mon blog => JuLeS’ ProGs
Programmeur xHTML/CSS,PHP/SQL,Javascript,C à votre service

 
Hors ligne Tantan # Posté le 08/06/2006 à 20:12:04 - Ce membre a mis la note : 20
Avatar
Groupe : Membres
Moi je suis pas du tout d'accord
Ce tuto est genial, il aborde une chose encore jamais vue dans les cours de Mateo ce qui est deja un tres bon point de plus il est simple et concis ce qui permet une tres bonne compréhension

Je pense que la seul chose à "corriger" c'est de bien précisé que ce tuto ne s'adresse pas au nouveau zero mais au zero deja expérimenté

Ps: sinon il manque un } du code de serveur sur la page de conclusion;)
Hors ligne azmeuk # Posté le 09/06/2006 à 10:43:26 - Ce membre n'a pas mis de note
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Merci Tantan pour ta critique.
Le } a été rajouté!
 
Hors ligne mannia # Posté le 26/08/2006 à 13:28:42 - Ce membre a mis la note : 16
Avatar
Groupe : Membres
Hello moi j'ai mit 16 car les socket c'est nouveau et bien expliquer même si j'ai pas tout compris du 1er coup. Sinon moi j'ai une erreur avec la& page reception.php je t'en est fait par par email.
Hors ligne Blue Sn4ke # Posté le 31/08/2006 à 00:02:46 - Ce membre n'a pas mis de note
Zelda Fan
Avatar
Groupe : Membres
Salut

Je cherchais un tuto pour apprendre à manier des sockets, et avec un comme celui ci ça donne encore plus envie ^^

Par contre je ne comprends pas deux choses :

- Pourquoi avoir besoin de sockets ici puisque client et serveur sont situés sur le même ordinateur ? On aurait très bien pu lire un fichier texte sans passer par les sockets par exemple non ?

- Dans la partie serveur tu utilises des variables sous la forme $this->xxx, c'est quoi ?
Hors ligne azmeuk # Posté le 31/08/2006 à 01:08:55 - Ce membre n'a pas mis de note
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Et bien pour un chat, le serveur et les clients ne sont pas censés être sur le même ordinateur. C'est d'ailleur le principe des serveurs/clients. Et à moins que tu ne veuille chatter seul, faire ça par un fichier texte ne serait pas d'une garde utilité ^^ .
Et pou ce qui est de ta deuxième question, c'est la syntaxe utilisée pour les classes, aussi apellé ProgrammationOrientéObjet (POO). Voici un tuto fait par un zéro détaillant les classes
http://www.siteduzero.com/tuto-3-1678-0-la-programmation-orientee-objet-en-php.html
 
Hors ligne Blue Sn4ke # Posté le 31/08/2006 à 14:40:53 - Ce membre n'a pas mis de note
Zelda Fan
Avatar
Groupe : Membres
Bah pourtant la partie Ajax n'envoie/recoit pas elle le socket, elle appelle la page reception.php qui elle se connecte au serveur et renvoie la réponse ! Donc le client et le serveur son bien sur la même machine à la fin non ?
Hors ligne azmeuk # Posté le 31/08/2006 à 15:11:56 - Ce membre n'a pas mis de note
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Non tu n'y est pas :)
La page réception.php comme son nom l'indique se contente de recevori les réponses. C'est la page send.php qui envoie les messages. (Car en effet Ajax est utilisé deux fois, une première pour envoyer un message , une seconde pour recevoir les réponses).
Comme je le disais tu Peux mettre le serveur et un client sur la même machien mais ça n'est d'aucune utilité. Je te fais un schéma:
Image utilisateur
Comme tu le vois, les client et le serveur sont deux choises distinctes qui ne sont pas forcement sur le même PC.
 
Hors ligne Damien490 # Posté le 10/01/2007 à 18:09:17 - Ce membre a mis la note : 20
Avatar
Groupe : Membres
Bonjour,

-Est il possible de faire en sorte qu'un appuie sur la touche "Entrée" envoi le message ?
-Est il possible que la barre de défilement verticale du div reste toujours en position basse lorsque le nombre de messages dépasse la hauteur du div ?
-Est il possible d'afficher les carractère spéciaux ( accents, cédille ... )

Bref le rendre agréable d'utilisation ! :)

Merci à vous !
 
Hors ligne B2Moo # Posté le 10/01/2007 à 21:07:34 - Ce membre a mis la note : 17
JS ? où ça ? où ça ??!!
Avatar
Groupe : Membres
Je n'ai lu que ce dernier tutoriel (pas le tout) donc mon premier commentaire est sûrement injustifié.

1-il ne faut pas confondre socket et ajax: la connexion par socket n'est utilisée ici qu'entre les processus php, on aurait très bien pu faire communiquer les pages php par une base mysql ( mais c'est plus lent, d'ou le choix des sockets).
La connexion ajax elle, permet de faire communiquer le client avec le serveur (et ça c'est déjà plus intéressant).

voir ce wiki
2-Cette technique de streaming a beaucoup de chance de ne pas marcher (voir les alternatives sur la page du wiki).
A chaque fois que des données sont reçue, onreadystatechange est exécuté.
Ca marche, seulement, le readyState ne change pas forcément: quand la page est en cours de chargement readyState reste constament à 3 (en cours de chargement, connexion qui n'est pas terminée).
onreadystatechange n'aurait pas du être appelée plusieurs fois (car readyState ne change PAS :p ).
C'est donc à considérer comme un comportement anormal de la part de firefox (je n'ai testé que là dessus), donc en quelque sorte déprécié.
voir def de l'évenement readystatechange qui déclenche la fonction onreadystatechange.Citation : w3c
event must be dispatched when readyState changes value


Il aurait mieux valu utiliser une vérification régulière du contenu de responseText (ex du periodicXHReqCheck() dans le wiki).

Secret (cliquez pour afficher)
17/20, parce que c'est quand même un défi technique assez impressionnant ^^

Je ne ponds pas vos scripts !! ;) (cot cot)
Je veux bien vous aider par contre :) , à condition d'expliquer clairement votre problème: exemple, codes, et surtout messages d'erreurs
big-tuto sur la gestion de la souris en js.
 
Hors ligne azmeuk # Posté le 11/01/2007 à 11:20:46 - Ce membre n'a pas mis de note
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Citation : Damien490
Est il possible de faire en sorte qu'un appuie sur la touche "Entrée" envoi le message ?

Il me semble qu'il est en effet possible de gérer ceci avec JavaScript (je crois que c'est la gestion des évènements), je compte rechercher comment faire, et je mettrais à jour le tuto
Citation : Damien490
Est il possible que la barre de défilement verticale du div reste toujours en position basse lorsque le nombre de messages dépasse la hauteur du div ?

Code : JavaScript
document.getElementById("content").scrollTop = document.getElementById("content").scrollHeight();
est censé mettre la barre verticale tout en bas. Ca marche chez moi, peut etre est-ce un problème de navigateur? Tu utilises lequel ?
Citation : Damien490
Est il possible d'afficher les carractère spéciaux ( accents, cédille ... )

Il me semble qu'il y a une manipulation à faire pour que tous les caractères s'affichent normalement, mais ce problème là est dû à ajax et non pas à php. Je vais rechercher aussi.


Ensuite Boo2M0rs0 merci beaucoup pour les informations que tu m'apportes, mais l'avantage d'exploiter ce bug ( qui marche aussi sous ie à mes souvenirs) est de voir s'afficher les messages en temps réel, et une vérification du réponsetext ne le ferais pas et une boucle de vérification trop rapide consommerais de la bande passante pour rien (on est pas à ça près mais bon). Ceci dit si je viens de dire une connerie ou que tu as autre chose de bien à proposer, fais moi signe!
Et merci pour la note
 
Hors ligne Damien490 # Posté le 11/01/2007 à 13:14:23 - Ce membre a mis la note : 20
Avatar
Groupe : Membres
Citation : azmeuk

Citation : Damien490

Est il possible d'afficher les carractère spéciaux ( accents, cédille ... )


Il me semble qu'il y a une manipulation à faire pour que tous les caractères s'affichent normalement, mais ce problème là est dû à ajax et non pas à php. Je vais rechercher aussi.


J'ai réussi a régler ce problème en faisant ceci :
Code : PHP
$pseudo = stripslashes(utf8_decode(substr($input , 0 , strpos($input , ' '))));
$message = stripslashes(utf8_decode(substr($input , strpos($input , ' ')+1 , strlen($input))));


Pour la barre défilement, rien à faire chez moi comme chez les utilisateurs du chat ça ne fonctionne pas ! (j'utilise FF ) Peut être que j'ai un problème d'adaptation de ton code sur mon server. Je revois ça un peu plus tard.

Si ces petit désagrément sont réglé, alors le chat est vraiment très agréable ! totalement intégrable, pas trop gourmand ! Le bonheur quoi xD

Merci beaucoup à toi ! :) 20/20

[EDIT] ops là un autre truc de résolu, la barre de défilement en bas en utilisant ce code

Code : JavaScript
var div = document.getElementById('content');
div.scrollTop = div.scrollHeight;
 
Hors ligne B2Moo # Posté le 14/01/2007 à 11:27:15 - Ce membre a mis la note : 17
JS ? où ça ? où ça ??!!
Avatar
Groupe : Membres
Citation
et une boucle de vérification trop rapide consommerais de la bande passante pour rien
Non justement, le timer ne ferais que vérifier le contenu de responseText , il ne lancerai pas de nouvelles requêtes donc ça ne consomme aucune bande passante (du temps processeur, m'enfin, un responseText.length toute les 0.1 s ça devrait pas tuer).

J'ai fait une page de test ici (désolé pour l'encodage :x) pour voir comment se comporte onreadystatechange. Si il y a écrit plusieurs fois que readyState passe à 3 (alors qu'il est déjà à 3), cela signifie que le navigateur supporte cette méthode.
edit: ie 6: non, par contre c'est étranger parce qu'il y a deux appels pour readyState = 1 ^o)
D'ailleurs, lance une exception si on essaye de prendre le contenu avant que readyState = 4
opera 8.5: non plus, responseText accessible mais vide. L'étape 2 est sautée et la 3 et 4 sont quasi-simultanée.

Je ne ponds pas vos scripts !! ;) (cot cot)
Je veux bien vous aider par contre :) , à condition d'expliquer clairement votre problème: exemple, codes, et surtout messages d'erreurs
big-tuto sur la gestion de la souris en js.
 
Hors ligne Damien490 # Posté le 14/01/2007 à 18:56:29 - Ce membre a mis la note : 20
Avatar
Groupe : Membres
Il y a un autre problème qui est assez ennuyeux, le server a tendance à s'éteindre tout seul malgré ces lignes :

Code : PHP

+++

[EDIT] J'ai réussi a réglé l'appuis sur entrer pour envoyer un message comme ceci :
Code : HTML

<form action="client.php" method="post" name="bidule" onSubmit="return(false)">
        <input type="text" size="50" name="envoyer" id="envoyer" />
        <input type="submit" value="Envoyer" onClick="envoi_message()" /></center>
        <input type="hidden" id="pseudo" value="<?php echo $donnees['pseudo']; ?>" /></form>


Il n'y a plus que le bug du server éteint intempesti a régler ! :x
 
Hors ligne azmeuk # Posté le 24/01/2007 à 20:48:45 - Ce membre n'a pas mis de note
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Le tuto est en cours d'édition, j'ai apporté comme changements toutes vos suggestions, et si j'ai du temps peut-être que je l'étofferai. Pour ce qui est du serveur qui coupe, je n'ai pas eu ce problème, comment le lances-tu ? Et sinon j'ai déjà vu ceci ignore_user_abort(true); au lieu de ignore_user_abort(), peut-être cela change-t-il quelquechose?
 
Hors ligne Damien490 # Posté le 25/01/2007 à 18:02:31 - Ce membre a mis la note : 20
Avatar
Groupe : Membres
effectivement, j'ai mi ignore_user_abort(1) et maintenant ça marche correctement :)

sinon une petite suggestion au passage des fois que tu t'ennuirais !

Une liste des gens connéctés sur le chat en temps réel ça serait plutot cool ! :)
 
Hors ligne azmeuk # Posté le 25/01/2007 à 18:15:00 - Ce membre n'a pas mis de note
n'a Jamais peur de la vapeur
Avatar
Groupe : Membres
Oui en effet, je vais préparer ça...
 
Hors ligne Awaken # Posté le 26/01/2007 à 17:17:27 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
Y aurait-il pas un moyen de garder la connexion ouverte et de ne pas se connecter à chaque fois qu'on veut envoyer un nouveau message ?

The greatest trick the Devil ever pulled was convincing the world he didn't exist.
 
Hors ligne almaju # Posté le 26/03/2007 à 23:53:15 - Ce membre n'a pas mis de note
StaarWar
Avatar
Groupe : Membres
Tu peux utiliser les cookies ;) .
Pour le reste, je pense que http://google.fr t'eclaireras mieux que moi :p ! (et puis j'ai la flemme là, il est minuit :lol: )

PS : Je n'ai pas mis de note car je n'ai pas encore testé, mais j'ai déjà une petite idée de créer un Windows Live Messenger... encore un rêve que je ne ferais pas je crois :D
Hors ligne tukan # Posté le 29/05/2007 à 21:36:26 - Ce membre n'a pas mis de note
Groupe : Membres
Je trouve le tuto pas mal, le sujet étant pas évident.

Par contre je reviens au schéma que tu a fait (client/serveur) et a une remarque d'un zero (c'est bien comme sa qu'on s'appelle non ? ^^) bref, je comprend pas non plus car le php étant toujours éxécuté coté serveur (l'ordi où tourne Apache.exe), le client et le serveur sont donc la même machine (l'ordi où tourne Apache.exe) donc j'ai un truc que j'ai pas capté...

Recherche beta-testeur pour super site trop bien tous nouveau le meilleur de tous. *hum* faut que je me calme !!! Donc recherche beta testeur pour jeu en ligne voir ma fiche recrutement
 
Hors ligne Erick # Posté le 31/05/2007 à 17:46:33 - Ce membre a mis la note : 14
Se coucher tard nuit.
Avatar
Groupe : Membres
Moi ça marche pas ! -_-' :-°
Quand je suis sur "client?pseudo=Coucou", je tape mon message, je fais envoyer, et là y a rien qui apparait.
Exactement comme si tout marchait, mais y a pas les messages ! :o

----> Erick :)
 
Hors ligne Jeremie78 # Posté le 13/07/2007 à 12:09:34 - Ce membre a mis la note : 18
Powered by GNU/Linux
Groupe : Membres
C'est une façon intéressante de faire un tchat, mais pourquoi ne pas tout centraliser sur le même serveur ?
On pourrais tout scinder en deux pages bien distinctes :
- la page qui génère le formulaire puis ensuite, une fois le formulaire remplis et envoyé, le code Ajax pour le Tchat
- la page qui traite toutes les requêtes envoyées par Ajax

Cela simplifierais grandement les choses.

Web-Modules : outils pour webmasters (compteurs, tchat, news ...) à installer sur son site, générateur de bannières, de userbars, ...
 
Hors ligne Sowhat # Posté le 24/07/2007 à 18:55:45 - Ce membre a mis la note : 17
Redlime >3
Avatar
Groupe : Membres
Vraiment bien expliqué -> 17 :)

lala.
 
Hors ligne Dufresne # Posté le 17/08/2007 à 15:16:27 - Ce membre a mis la note : 18
Allez VA !!
Avatar
Groupe : Membres
J'ai un problème: quand un client ferme sont navigateur, le socket de ce client est toujours connecté :o
Et à cause de ça, le serveur ne vide pas la variable $this->clients[$nom_case]

A part ce truc la, super tuto ;) (18/20)

Image utilisateur
 
Hors ligne dakaro # Posté le 03/11/2007 à 20:28:18 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
quelqu'un serai donner le lien ver sle tchat svp,
pour que je puisse voir a quoi ca resemble a la fin.

Envie de réaliser un projet sérieux ? Alors Magic Park est fait pour vous !


 
Hors ligne JeromeJ # Posté le 16/03/2008 à 16:22:00 - Ce membre a mis la note : 10
Avatar
Groupe : Membres
Bah moi jtrouve que ta syntaxe gache un peu tout :/
De plus certains points ne sont pas très claires.








Secret (cliquez pour afficher)
Ce que je maitrise actuellement: XHTML, CSS, PHP, Action Script 2 et 3, JavaScript, SQL, Python, et un peu de C, C++ et d'erl
 
Hors ligne asicolin # Posté le 04/11/2008 à 13:40:31 - Ce membre a mis la note : 15
Groupe : Membres
Tout d'abord merci pour le travail accompli avec ce tuto qui est intéressant.
La technique que tu emploies est vraiment pratique et peu décrite sur internet.
J'ai pu cependant relever quelques petites erreurs ou manque de précision (ou c'est moi qui ait mal compris ;) ):

1) - Pour pouvoir récupérer les données envoyée par le serveur via le script de réception, j'ai du utiliser la fonction ob_flush() trouvée ici. Si je n'utilise pas cette fonction, le readystate du xhr objet reste a 1.

2) - Script "reception.php" ligne 18 : socket_read($socket, $port))
Le 2eme param de socket_read n'est pas un port mais le nombre d'octets a lire.

3) - Dans la partie "Le chat" de ton tutoriel, fonction reception() en javascript :
Tu utilises une fonction basé sur le changement de readystate pour actualiser le chat

Citation : Dans la partie 'Le Chat'

xhr_object.onreadystatechange = function()
{
if(xhr_object.readyState == 3)
{
var reponse = xhr_object.responseText;
document.getElementById("content").innerHTML = reponse;
div.scrollTop = div.scrollHeight;
}
}


Et dans la partie "Recapitulons le code", tu utilises pour recuperer les informations une fonction qui se relance toute les 100ms
Citation : Dans la partie 'récapitulons le code'


var update = function()
{
if(xhr_object.readyState == 3 && xhr_object.responseText.length > taille)
{
taille = xhr_object.responseText.length;
var reponse = xhr_object.responseText;
document.getElementById("content").innerHTML = reponse;
div.scrollTop = div.scrollHeight;
}
setTimeout(update,100); //Se relance toute les 100 ms (voire moins ?)
};
update();


Chez moi les 2 marchent mais pourquoi une fonction qui va vérifier toute les Xms plutot que la premiere qui me parait bien plus efficace. Erreur de Ctrl-C Ctrl-V ? :-° ;)

Enfin voila je crois que c'était tout, j'ai pris la peine d'écrire parceque je trouve ton tuto utile et qu'avec 2, 3 ptits changements je pense qu'il pourrait être parfait.
Bonne continuation.

PS : quelqu'un saurait me dire dans quel cas il est plus intéressant d'utiliser sock_create() et dans quels cas il vaut mieux se servir de fsockopen() ? merci

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 52 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.1428s (0.1313s)