requete mysql spéciale pour créer un chat - SQL/NoSQL - Programmation
Marsh Posté le 18-12-2007 à 12:28:21
le plus simple est que le processus php interrroge la base régulièrement
Marsh Posté le 18-12-2007 à 12:59:29
bien merci, j'ai peur que ça mange un peu de charge, car y'a bcp de monde sur le serveur, enfin je verrais bien et puis je pourrais diminuer la fréquence à laquelle j'interroge la base, merci enocre
Marsh Posté le 18-12-2007 à 13:25:22
Tu as deux process PHP? Etrange, mais bon, IPC ou une communication socket-based pourrait réduire la charge.
Marsh Posté le 18-12-2007 à 13:35:31
ben en fait il y'a un processus qui est appelé par la page du chat pour recevoir les messages envoyé, c'est celui ci qui est en attente, et l'autre processus est appelé lorsque qu'un autre utilisateur veut envoyer un message et c'est celui la qui change la base de donnée, c'est vrai que je pourrait faire ça avec ipc(je savais pas que c'était disponible sur php), mais comme ça a l'air un peu compliqué pour l'instant je reste sur mysql,merci
Marsh Posté le 18-12-2007 à 13:40:29
C'est assez curieux, en PHP. J'ai l'habitude de manipuler threads et processes, mais en PHP, je suis perplexe.
Par curiosité, tu peux m'en dire plus? "Il est en attente" comment? Pq deux process?
Marsh Posté le 18-12-2007 à 13:48:18
en fait le premier est en attente simplement par une fonction proche de celle la :
while(1){
sleep(5);
verifier que y'ai un message sur la base de donnée, si oui on sort de la boucle;
sinon on continue la boucle;
}
voila et l'autre processus met la base de donnée à jour.
enfin j'utilise le mot processus car j'ai l'habitude de ce mot sous linux mais je sais pas si c'est bien adapté pour php!
Marsh Posté le 18-12-2007 à 14:34:31
nicobzz a écrit : en fait le premier est en attente simplement par une fonction proche de celle la : |
Les scripts php étant tué au bout de n secondes (généralement 30) ton idée est la meilleure façon pour obtenir un beau message d'erreur au lieu d'une belle page entière.
A noter aussi que les navigateurs aussi ont un timeout qui fait que s'ils ne reçoivent rien pendant x secondes, ils affichent une page d'erreur à la place de la page normale.
Enfin même si ton idée permet d'économiser de la bande passante, tu perdrais au niveau de la charge serveur ce qui n'est pas forcément mieux.
En pratique, il n'y a que deux solutions qui soit mieux qu'un rafraichissement régulier avec appel d'un script php à chaque rafraichissement :
1) avoir un serveur web capable de prévenir chaque navigateur qu'une mise à jour vient d'avoir lieu. Personnellement je n'ai jamais croisé un seul site web qui utilise cette possibilité et c'est une solution qui pose des problèmes (potentiel) de sécurité : qui dit que le message reçu par le navigateur vient bien du serveur qui héberge le site web et non pas d'un ordinateur sur internet qui se fait passer pour lui.
2) utiliser des programmes clients (java ou flash par exemple) qu'on affiche dans la fenêtre du navigateur et qui se connecteront au serveur de manière continu (sans déconnection entre chaque appel). Evidemment, le serveur ne doit pas couper les liaisons donc ça exclus l'utilisation de page php accessible à travers un serveur web. En pratique, le couple qu'on retrouve le plus souvent, c'est un serveur irc et des clients irc écrit en java.
Marsh Posté le 18-12-2007 à 14:37:10
Oui, là c'est bien un process, mais il dort un peu connement plutôt que de se réveiller sur un trigger. Tu risques d'attendre jusqu'à 5 secondes : je ne sais pas si c'est acceptable comme granularité.
En fait, ça ressemble un peu à une queue.
Mais justement, pq un process qui dort? Le deuxième process qui reçoit le message ne peut-il pas prendre directement action? Pq ce découplage?
Marsh Posté le 18-12-2007 à 14:39:45
omega2 > C'est seulement possible en PHP, ce que tu proposes?
Un client Java, ça peut le faire, mais bon, on retombe sur du bien lourd avec connexion persistante.
Tout ça pour du chat?!
Est-ce qu'un truc ajaxoïdal ne pourrait pas faire l'affaire?
Marsh Posté le 18-12-2007 à 14:40:13
Autrement dit : pas sûr de bien piger la motivation de l'architecture. :-/
Marsh Posté le 18-12-2007 à 14:54:36
j'avais mis un client java avec un serveur irc, mais il fait pas recette car je l'ai mis sur une page voisine et personne n'a envie de le visiter, et sinon pour le temps auquel le script php est tué, j'y ai pensé, et le script PHP sarrete automatiquement avant un temps que je détermine,sinon j'utilise de l'ajax pour faire les requetes, et apparement il attend indefiniment la page sans mettre de message d'erreur, le flash ça serait bien car je pourrais le mettre dans la page d'accueil mais le soucis c'est de trouver un truc flash gratuit qui fait chat et le java n'étant pas tres rapide à se charger je prefere pas handicaper les jeux qui ne veulent pas discuter sur le chat
voila donc bon solution un peu crad peut etre mais je pense quelle devrait marcher bien au final, et puis j'ai pas trouvé mieu
Marsh Posté le 18-12-2007 à 15:07:43
et je vous rassure le temps d'attente n'est pas de 5 sec au debut mais de 1 sec
Marsh Posté le 18-12-2007 à 15:25:34
nicobzz > Pour le flash, le problème, c'est que ça rame quand c'est mal fait. Je le vois souvent sur certains site où les pubs prennent jusqu'à 80% de mon processeur. Evidemment, il existe des programmes en flash qui sont bien réalisé et qui ne pompent pas beaucoup de processeur.
Pour un chat en php, par expérience je peux t'affirmer qu'en pratique les gens préfèrent attendre 10 secondes au chargement que d'avoir l'impression que le chat saccade et cette impression, ils finiront par l'avoir à moins que le chat en php reste quasiment désert. Même si tu ne t'en rends pas compte quand tu le développes, ça devient vraiment visible quand du monde discute. Côté vitesse de rafraichissement, pour te donner une idée, un rafraichissement toutes les secondes équivaut en moyenne à 2.5 secondes de retard dans l'affichage d'un message (la seconde de rafraichissement + 1/2 seconde en moyenne qui correspond au moment où l'autre a posté un message + 1/2 seconde pour le temps que le serveur reçoive un message après qu'on ai appuyé sur "valider" + 1/2 seconde le temps que ton navigateur demande au serveur où en est la discussion et reçoive la réponse). Si vous êtes 2 ou 3 vous ne vous rendrez peut être pas compte du problème (vous aurez juste l'impression que l'autre tape pas vite) mais si vous êtes 15 ou 20 à discuter activement là vous aurez droit à un affichage des messages par lots (plusieurs d'un coup) et le problème se sentira.
En fait, contrairement à toi, je n'ai jamais trouvé mieux qu'un chat en java pour mettre un chat sur un site web (et je te dis ça alors que mon premier site dynamique était un chat en php+html). Reste ton problème du "personne n'y va par ce qu'il est sur une autre page", je peux t'affirmer que le problème sera exactement le même que ton chat soit fait en java, en flash, en php+html+javascript ou dans un autre langage. Si tu veux éviter ce problème là, alors il faut que tu te tournes vers les "shootbox" (zone de texte qui sert à afficher les x derniers messages) qui est le plus proche de ce que tu as l'air de chercher (du moins c'est l'impression que j'ai) mais tu peux alors dire adieux à la liste des personnes vraiment connecté (et pas juste passé même si plus là).
Marsh Posté le 18-12-2007 à 17:34:30
ben en fait ce que j'avais oublié de préciser c'est que ce n'est pas un chat mais un instant messanger plutot et que je veux le mettre dans la page d'accueil, ce que je ne peux pas me permettre avec un chat java, c'est un site assez fréquenté , site de l'assoc d'une fac de médecine ou y'a ptere 4000 élèves, et j'ai pas envie de leur faire peur en mettant un chat en java qui va demander au gens inexperimenter d'installer une machine virtuelle java
en fait je veux que ça reste léger pour l'utilisateur.
Marsh Posté le 18-12-2007 à 17:39:05
on a deja un truc sur le site qui liste les derniers message du forum, je sais pas si c'est cela que tu appelles un shootbox?
Marsh Posté le 18-12-2007 à 18:16:25
Une shootbox, généralement, c'est une zone de saisie + une zone d'affichage où les messages sont affiché. Un peu comme un chat hyper minimaliste qui ne se contente que d'afficher ce qui est saisie sans rien faire de plus (et en général, c'est sans rafraichissement auto)
nicobzz > Finalement, t'as besoin de quoi? D'un chat qui ne fait que des sessions privés ou d'une messagerie privé sur les forums (on envoie le message et l'autre le lira quand il passera et qu'il veut bien le lire) ?
Marsh Posté le 18-12-2007 à 18:20:55
Taz a écrit : installe phpfreechat et voila |
J'ai testé leur démo. Avec firefox, c'est super lent au démarrage (lui qui ne voulait pas perdre 10 secondes, il va être servi) et avec IE7 c'est la cata complet : navigateur figé. Pour IE7, je l'ai tué au bout de deux minutes pour m'en dépêtrer.
De plus il veut ça pour un site sur lequel il pourrait y avoir beaucoup de monde à la fois. Un chat qui stoque les messages dans un fichier est le meilleur moyen soit d'en perdre quelques un de temps en temps soit de ramer quand du monde parle (en fonction de si on utilise ou non des verrous sur les fichiers).
Marsh Posté le 18-12-2007 à 18:32:01
une messagerie instantanée, c'est à dire que quand quelqu'un ecrit un message destiné à une autre personne, l'autre personne si elle est connecté recoit tout de suite message (comme msn mais juste pour le site), en fait vu qu'on se connait de vue dans la fac, ça permettrais de se retrouver sur le site de la fac et de creer des liens,donc php freechat ça doit faire l'affaire en le bidouillant un peu pour le transformer en messenger, mais mon programme est deja en bonne voie et presque terminé, j'ai plus que quelques reglages à faire, et à demander à lautre admin de l'integrer dans les pages principales, jespere que ça va pas trop faire ramer, mais c'est pas grave si mon prog marche mal car il ya quand meme un chat java/irc sur le site donc si les gens veulent que ça soit fluide ils iront sur le vrai chat.
en tout cas merci pour les conseils
Marsh Posté le 18-12-2007 à 18:36:13
ok, ben bonne chance alors, je vous souhaites qu'il marche bien.
Marsh Posté le 18-12-2007 à 18:56:55
omega2 a écrit : |
ça charge instantanément chez moi sur FF.
Sinon ton truc ça s'appelle IRC ...
Marsh Posté le 18-12-2007 à 12:25:41
bonjour, voila mon problème, je souhaite créer un chat pour mon site web, et j'ai besoin d'un moyen q'un processus php soit informé du changement d'une donnée par un autre processus php (la donnée étant le message à envoyer par le chat), la donnée peut par exemple être mise dans la base de donnée mysql.
Ma question est donc, connaissez vous un moyen avec mysql de mettre un processus php en attente jusqu'a ce que une donnée dans la base de donnée ait été changé par un autre processus php, ou bien faut t'il relancer un requete régulièrement pour voir si la donnée à changer.
Voila, merci si vous pouvez me donner une réponse
a plus