TCHAT PHP5, JAVASCRIPT->AJAX

vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010 - 14 nov. 2012 à 12:20
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 - 9 mars 2014 à 11:30
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54744-tchat-php5-javascript-ajax

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
9 mars 2014 à 11:30
Bonjour.
Tu as ta réponse dans le fichier aide.html.
Bonjour je ne sais pas si on va me répondre mais est ce que quelqu'un peu me donner les tables à créer dans la BDD ? Merci
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
27 août 2013 à 16:48
Salut JejeScript et tous,

Je reviens vers vous car nous n'avons pas trouvé réellement la solution au problème de rafraichissement de la page en Ajax qui est le véritable problème.

La solution serait que si, d'un poste client, on envoi (ou poste) un message, le serveur réagi et envoi un retour chez les autres personnes connectées au chat sans faire c'est tests asynchrone en Ajax.

Il y a plusieurs solutions, un serveur APE.
Lien : http://www.ape-project.org/docs/server/
Je vous avoue que c'est compliqué. Mais, sur tout les forums ou j'ai croisé une discussion similaire, ils se retournent souvent sur NodeJS et Socket.IO.
Et là (enfin la solution miracle :)) pour moi, le top.
Je bosse sur un serveur dédié et mon administrateur système m'a installé le serveur cela les doigts dans le nez (Linux). Sur mon poste (localhost) sur Windows, il m'a fallu 2 minutes et rien de plus.

Voici un très bon tuto et en plus en français :)
Lien : http://www.grafikart.fr/tutoriels/nodejs/nodejs-socketio-tchat-366

Pour faire simple, coté poste client et serveur, cela fonctionne uniquement en JavaScript.
Donc, si vous maitrisé le JavaScript ;)
Pour ceux qui maitrise l'object, imaginé qu'a chaque fois qu'un poste client ajoute un nouveau message, le même object s'incrémente et peut retourné la totalité de la discussion à un nouveau poste qui c'est connecté dans un temps ultérieur à la discussion et cela sans base de données.
:)

Bien à vous tous,

Stay
Bonjour à tous,

Je suis désolé ces derniers temps, je ne suis spas présent, pas mal de chose à réglé quelques soucis personnels font que je n'ai pas vraiment de temps.

Mais une fois que tout sera réglé, et que ça tournera un peu plus rond pour moi, je reviendrai ! "rire"

Cordialement.
cs_theptitprince Messages postés 14 Date d'inscription dimanche 3 décembre 2006 Statut Membre Dernière intervention 5 janvier 2012
23 juin 2013 à 23:24
petit décrassage... Pour éviter le rafraîchissement permanent, mais avoir les nouveaux messages automatiquement, regarde du coté de nodeJS et socket.IO...
Je viens de tester ton chat en effet, hyper sympa, la customisation est très simple.
Je vais essayer de mettre en place la liste des connectés de mon côté.

Je reviens ici si je galère trop ^^

Merci pour ton chat en tout cas il est vraiment très propre.
Alors tu es quelqu'un de talentueux je t'encourage,tu fais de bon travail a bientot,tiens moi au courant je m'interesse a tes création.
Bonjour,

tidave, je te répond un peu tard et je m'en excuse je trouve ton idée pas mal du tout.

Arihus2k, tu as des bonnes idées aussi, je suis en train de développer quelque chose dans cet ordre d'idée, je n'en dit pas plus pour le moment.

Cdt,

JejeScript
j'aurai bien aimé si tu rajoute a Espace membre
- un chat en direct genre l'ancien Caramail avec administration,salon,liste des connecté,ignorer,bannir,ejecter discussion privé.....etc
et aussi developper l'espace membre en style webmail CAD le membre peut avoir une adresse email membre@monsite.com

et aussi ameliorer la messagerie interne avec Stockage de fichier pour chaque membre,ajouter des Alias ou....etc
cs_tidave Messages postés 18 Date d'inscription dimanche 31 octobre 2004 Statut Membre Dernière intervention 16 juin 2009
8 janv. 2013 à 17:55
SAlut a tous bonne année
alors pour mon tchat PHP ajax, ce que je fait

pour le rechargement, j'ai un petit fichier que je recharcge toutes les secondes, sont role est juste de verifier sur la base si il y a un nouveau meassage ou un message en moins (peu etre utile), si il y a un changement alors la seulement je recharge la page qui affiche les messages, ce fichier teste aussi les messages privés , de sortes que la page affichage se recharge quand il y a un nouveau message privé, meme si je n'envoie rien, c'est utile aussi pour recevoir une notification ou alerte de demande de message privé

voilà

ça tourne plustot bien, mais c'est sur que sur un mutualisé, ça consomme, mais c'est normal, apres il faut optimiser au mieux

alors en gros, mon petiti fichier va tester si il y a un nouveau message, ce que je fais , id dernier message + nombre total messages + id du premier message , je mets ça dans un cookie, je compare chaque seconde si la valeur a changé ensuite si oui je rafraichis la page affichage message et je reecris mon cookie avec la nouvele valeur

j'espere que ça a été claire

a bientôt
merci pour tous vos commentaires, et désolé de ne pas avoir répondu plus tôt
j'étais pas mal occupé.

et Jadu attend ton tchat en php, avec impatience
jadu Messages postés 217 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 16 août 2018
23 nov. 2012 à 18:48
Désolé JEJESCRIPT !
mon FAI, free, ne connait pas PDO !!!
déjà que pour passer en php 5 il faut le noter dans le fichier .htacces !!!

et donc mon "tchat" plante chez eux alors qu'en local, c'est un réel plaisir !!!

bravo à toi !
sazaju Messages postés 48 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 3 juin 2013
20 nov. 2012 à 19:12
Le must pour éviter la fréquence de rafraîchissement, c'est d'avoir un événement quand un nouveau commentaire est posté, mais c'est pas faisable (a priori) en Javascript, car l'événement est sur le serveur et Javascript est côté client, donc pas de synchro. Ajax vise à résoudre ce genre de soucis entre autres (mais ce n'est qu'une combinaison de techniques dont Javascript).

Pour du simple Javascript, la fréquence de rafraîchissement est nécessaire mais devrait être réglable. Voire même se réglée automatiquement en fonction de la charge du serveur (mais ça c'est de l'optimisation).

Autre chose : utilise des noms explicites, surtout pour tes constantes ! Une constante "s" ou "b" ça dit rien à première lecture. Merci de faciliter la lecture de ton code en utilisant une convention de nommage explicite.

Pour plus de généricité, utilise PDO plutôt que mysqli, des fois qu'il y ait des gens qui n'utilisent pas MySQL (PostgreSQL, SQLite, ...).

Pour ajout_message(), plutôt que de faire "if (function) { return true; } else { return false; }" tu peux faire "return function;".
hi il n'existe il pas sur php 1 equivalence des socket sur java ??
jadu Messages postés 217 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 16 août 2018
19 nov. 2012 à 12:31
Salut jejescript le cuistôt !

tu te lances an javascript ? tu as beaucoup de temps libre !!!

je vais placer en "tchat" en php5, tu vas voir, c'est plus sympa, euh, simple !!! MDR
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
14 nov. 2012 à 18:39
oui, mais même sur un serveur dédié.
Imagine que 500 conversations sont en cours et que dans chaque conversation, il y ai 15 personnes.
Cela fait beaucoup de ressource à gérer de la part du serveur chaque seconde.
15 * 500 = 7500 scripts (requêtes SQL) à la seconde.
:)
c'est vrai que sa peut être un problème sur un serveur mutualisé
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
14 nov. 2012 à 18:30
oui, tu as raison mais je ne trouve pas cela très optimisée.
Mais je n'ai pas plus d'idée pour éviter le rafraichissement direct.
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
14 nov. 2012 à 18:24
En effet, après l'envoi du commentaire, tu fais un retour html dans le div
non je dis une bétise ça reviens au même
il faudra que tu ecrive un message pour voir celui de ton corespondant, pas idéal pour un tchat
bien que cela doit être faisable avec la requete d'envoie message, a voir.
et la personne avec qui tu tchat voie ton message que si elle en ecrit un ?
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
14 nov. 2012 à 18:10
J'ai remarqué que le script se rafraichit toute les secondes.
Pourquoi ne pas le rafraichir uniquement après un nouveau commentaire ?
Re,

Je reviens sur le message de stay, lol.
En fait je ne pense pas que ce soit une bonne idée, pour plusieurs raisons :
1) la sécurité.
2) la facilité.
3) les soucis d'accès concurrents.

Je pense qu’une fonction qui nettoie la bdd serais plus appropriée, après a voir automatisée ou au confort de l'administrateur, je verrais bien.
Encore merci pour ton idée.

Cordialement,

JS
Bonjour,

Vincseize voici un lien de test : http://www.jejescript.0fees.net/
comme je l'ai dis ce n'est que le début, il va évoluer.

Stay, merci pour ton idée, je pense qu'elle peux surement me rendre service pour le chat avec les salons et tout le reste.
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
14 nov. 2012 à 17:23
Bonjour JejeScript,

Je ne crois pas qu'utiliser une base de donnée soit la meilleur idée pour ce type de projet.
Tu vas obstruer la base de données.
De plus, après 5000 INSERT, ton SELECT ne sera plus aussi efficace qu'au départ.
Pour éviter cela, il faut travailler sur fichier.
Et même en générant des fichiers cache pour utiliser la base de données, le fichier devrait être écrasé à chaque nouvelle INSERT.
Donc, un nouveau SELECT après destruction du fichier.
La base de données est une mauvaise idée.

Il faut sauvegarder la conversation directement sur fichier.
Un fichier par conversation.
Le fichier devrait être détruit en fin de conversation.
Comme cela, le serveur ne sera pas obstruer.

Quand penses-tu ?
vincseize Messages postés 113 Date d'inscription mardi 25 février 2003 Statut Membre Dernière intervention 28 mars 2010
14 nov. 2012 à 12:20
Y aurait il un exemple concret à voir ?

Merci d avance
Rejoignez-nous