Developpement chat php

vidda
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 5 Sep 2011

Re: Developpement chat php

Message le Lun Sep 05, 2011 20:02

Bonjour,

Je me suis inscrit ici presque EXPRÈS pour participer à CETTE conversation. Simplement parce que cette fois la coupe est pleine!
La question de Passion, postée il y a déjà quelques années (et tout à fait pertinente), n'a pas trouvé de réponse CLAIRE. Au lieu d'essayer de le guider, de l'encourager, on vient lui dire de ne pas se prendre la tête et d'utiliser IRC...
Non mais attendez là... Doit on venir sur ce forum pour qu'on nous dise que ce qu'on fait ne sert à rien sous prétexte que quelque chose de plus simple ou de déja fait existe? On devrait toujours s'en remettre aux autres et ne jamais rien tenter, alors?

Je fais AUSSI un chat en AJAX/PHP. Même si comme je veux j'en trouve partout, et gratuit en plus. Je suis complètement autodidacte, donc d'un niveau bien moindre que beaucoup d'entre vous. Je SAIS que je pourrai utiliser IRC, je SAIS AUSSI que mon chat n'ira pas loin. Mais qu'est ce qui est le plus important? laisser tomber ou tenter l'expérience?

Alors, pour en revenir à nos moutons, j'ai peut-être un debut de réponse pour Passion il y a 6 ans à propos de la gestion de messages privés, même si depuis le boulot est déjà fait, ça servira peut-être à d'autres.
Bon, j'ai déjà quelques idées, mais il faudrait d'abord que j'explique le fonctionnement actuel. en bref:

$(document).ready() se charge de contrôler quelques actions et appeler la fonction qui sert à ajouter (ajax) le nouvel arrivant à la table de BDD "enligne" (je vous épargne les détails de vérifications diverses), et qui fait le premier appel à la récupération des messages. Coté serveur, on en profite pour ajouter dans la table de messages le pseudo "connexion" et le message "untel vient de se connecter". Même méthode pour la déconnexion à ceci près que l'ajax est en mode synchrone.
la fonction js qui lit les messages fait le tri et appelle la fonction de récupération de la liste des connectés en lisant "connexion" comme pseudo.
Pour un message normal on ne fait rien de plus, la fonction de récupération des messages se rappelant elle même toutes les 2 secondes.

Comme vous pouvez vous y attendre, chaque message en BDD a un id auto_increment pour éviter de récupérer toutes les lignes à chaque fois.

Alors pour les messages privés, je serai tenté de mettre un pseudo de la forme "expediteur_2_destinataire" dans la table des messages. du coup à la lecture du message, la fonction saura faire le tri.
Mais pour la réponse, il faudrait transformer le pseudo en "destinataire_2_expediteur".
Pour la gestion des fenêtres de conversations privées, on créé un tableau js vide (pvtab) qui contiendra les noms des fenêtres pour vérifier ultérieurement si telle ou telle fenêtre est déjà ouverte. En effet, on peut très bien avoir plusieurs conversations privées.

Lorsque l’expéditeur veut envoyer un PV, le clic sur le lien prévu appelle la fonction d'ouverture de fenêtre, un div généré par prepend(); on l'ajoute au tableau pvtab.
Pour la communication privée en cours, la fonction de lecture des messages généraux obtient un champs pseudo "PV", et, à l'instar du pseudo "connexion", elle va interpréter le message comme étant destiné au destinataire spécifié . La réponse du serveur n’étant qu'un tableau encodé en JSON, on peut parfaitement y mettre l’expéditeur et le destinataire.
Pour ouvrir la fenêtre privée du destinataire au premier message, il suffit de vérifier l'existence du nom de la fenêtre dans le tableau pvtab.
à la fermeture de la fenêtre, on en efface le nom du tableau.

Voila en gros la manière dont je vais procéder. J’espère que ce post profitera à d'autre, je me tiens dispo pour des éclaircissements si besoin

vala vala
A ciao

DadouDuck
WRInaute impliqué
WRInaute impliqué
 
Messages: 910
Inscription: 28 Mai 2007

Re: Developpement chat php

Message le Lun Sep 05, 2011 20:37

Le problème avec cette méthode, c'est que dès que tu as trop de monde, ton serveur va vite consommer en ressources (ça à été dit auparavant) par contre, pour le soulager, il faut utiliser les sockets : http://stephaneey.developpez.com/tutoriel/php/sockets/ un gros avantage de ce système : le navigateur est avertis lors de nouveaux messages, donc pas d'appels récurrents au serveur.

vidda
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 5 Sep 2011

Re: Developpement chat php

Message le Mer Sep 28, 2011 16:11

Alors ça, c'est ce qui s'appelle une VRAIE réponse constructive.

En effet, en evoluant sur le tchat que je developpe, moi aussi, n'en deplaise, en php/javascript (AJAX), je cherchais une solution pour:
-eviter les doublons
-eviter les requetes clients trop regulieres (surtout à partir d'un nombre important de connectés)
-detecter les eventuelles deconnexions intempestives (pannes de courant, plantage machine, wifi perdu et j'en passe)

Cette histoire de socket va peut-etre m'obliger à repenser mes scripts entierement, mais cette fois pour gagner en performance autant coté serveur que coté client.

Merci à toi, je ne sais comment te signifier ma gratitude


spout
WRInaute accro
WRInaute accro
 
Messages: 4377
Inscription: 14 Mai 2003

Re: Developpement chat php

Message le Mer Sep 28, 2011 19:02

Sinon il existe des solutions style:
- Ajax Push Engine: http://www.ape-project.org/ (2 démos de chat: http://www.ape-project.org/demos/)
- node.js: http://nodejs.org/ (démo de chat: http://chat.nodejs.org/)

vidda
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 3
Inscription: 5 Sep 2011

Re: Developpement chat php

Message le Sam Oct 01, 2011 10:34

Cette histoire de sockets en PHP est tout à fait intéressante.

Bon le tuto de Stephaneey est convaincant mais je refuse de "copier/coller" un script, je préfère encore développer moi même ce machin pas à pas.

Cela dit, une interrogation subsiste: J'ai vu et bien compris la nécessite de lancer le script coté serveur en mode console mais je me demandais si le premier client qui se connecte pouvait, en toute transparence, lancer ce fameux script serveur.

Notez que je ne suis pas l'administrateur du VPS qui héberge le tchat.
Notez aussi que le dev n'est pas mon métier, je ne suis qu'un humble bidouilleur amateur autodidacte sans ressources suffisantes pour une éventuelle formation complète.

Il me suffirait, me direz vous, de lancer la page sur mon navigateur pour que celui ci soit lancé. Mais comment faire si ma machine est éteinte (comme beaucoup je ne peux pas me permettre de laisser ma machine en route constamment pour des raisons évidentes de consommation d’énergie(il ne s'agit pas plus de facture EDF que de politique écologique en énergie). Et quand bien même, si ma machine en vient à planter ou doit redémarrer pour une raison x ou y, c'est fichu.

Ce que je cherche à faire c'est que le premier client qui se connecte puisse lancer la commande d'ouverture du dit script sans pour autant lancer une page.
Tant que je n'ai pas résolu ce problème je suis dans l'incapacité de pouvoir commencer quoi que ce soit, plutôt gênant...

Comme vous m'avez l'air de gens bien calés et que la solution doit être d'une simplicité extrême, je suis sur que vous pourrez m’éclairer sur le sujet ne serait ce que par quelques pistes, car Google, aussi performant soit il, ne peut pas me trouver de "tutoriel pour les nuls" qui n'existe pas (pas faute de chercher, tout me ramene au tuto de stephaneey)
J'insiste sur le fait de rester en PHP car c'est un langage que je connais. L'auto-apprentissage d'un nouveau langage prend du temps que je n'ai pas (boulot, enfants, vie de famille, etc). Les sockets ne sont après tout qu'une nouvelle notion qui ne me fait pas peur.

Je vous remercie d'avance ;)

Developpement chat php

Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités