Chat one to one

Eléphanteau du PHP | 45 Messages

14 janv. 2008, 14:21

Bonjour @ tous,

Je suis actuellement sur le développement d'un chat one to one, et je me demandais s'il était plus judicieux d'utiliser les tables Memory mysql ou des fichiers XML pour l'échange des messages entre utilisateurs.

Les tables Memory ont un temps de réponse plus rapide étant donné que c'est la mémoire qui est sollicité, alors que l'écriture sur le disque d'un fichier XML pourrait quand à lui mettre plus de temps à répondre...Mais étant donné que je doit stocker l'historique des conversations quelque soit mon orientation technique, je me demandais s'il ne fallait pas que je joue justement sur les deux tableaux.
Je m'explique (concis bien sur, j'oubli volontairement des paramètres pour simplifier l'explication) :
Un utilisateur A (expediteur) souhaite prendre contact avec un utilisateur B (Destinataire).
Il faut prévoir d'envoyer le message de l'expediteur A et récupérer le message pour l'afficher à l'utilisateur B.
Deux solutions d'offre à moi?
Soit :
1) je créer un XML lié a la conversation des utilisateur qui me sert de fichier d'échange
2) soit je créer une table Mysql de type Memory qui stocke l'ensemble de la conversation, et selon un évènement côté client (fermeture de fenetre, setintervalle) je décharge cette table pour l'inscrire dans un XML afin de gérer l'historique au fur et à mesure de la conversation. Dans ce cas vous allez me dire pourquoi ne pas utiliser directement le fichier XML ? Et bien je vous répondrai que je suis vraiment dans un soucis de temps de réponse, donc je souhaiterai savoir lequel est le plus rapide selon vous ?

Merci d'avance pour vos réponses

ViPHP
ViPHP | 5924 Messages

14 janv. 2008, 14:28

Ou sinon, pour s'assurer que l'écriture se fera vraiment, tu ne peux pas faire un cron exécuté toutes les minutes ?

Eléphanteau du PHP | 45 Messages

14 janv. 2008, 14:33

Oui, bonne idée ! Mais répercuter sur un grand nombre d'utilisateur qui chat en même temps, le crontab n'est il pas trop gourmand en ressources au final ?

ViPHP
ViPHP | 5924 Messages

14 janv. 2008, 16:56

Bah, en fait, tu peux l'exécuter très souvent (genre toutes les 10 secondes), et sauvegarder à chaque exécution une seule discussion, voire une discussion terminée.

Eléphanteau du PHP | 45 Messages

14 janv. 2008, 18:48

J'ai un peu peur que dans le cas d'une utilisation simultanée de plusieurs utilisateurs sur le chat cela finisse par être un peu trop lourd niveau requêtes éxécutée dans le fichier php ciblé par le crontab.
Cependant, cela ne répond pas à ma question du début en ce qui concerne la rapidité d'accès à mes informations (écriture et lecture) en fonction de la methode MEMORY ou XML ? Vais - je gagner quelques pouillèmes de temps de réponse si j'utilise la methode MEMORY ? Ou est elle vraiment judicieuse dans ce contexte d'utilisation ?

Mammouth du PHP | 1885 Messages

14 janv. 2008, 18:53

Et pourquoi pas un fichier texte qui sera inséré dans la BDD à la fin de la conversation?
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphanteau du PHP | 45 Messages

14 janv. 2008, 19:18

Ce que je souhaite savoir, c'est si le fait d'utiliser les tables MEMORY est plus performant que de devoir écrire un fichier sur le disque (qu'il soit text, XML, ou autres...)

Mammouth du PHP | 1885 Messages

14 janv. 2008, 20:32

Surement vu que c'est en mémoire.

Cependant les données seront perdus si MySQL plante, est redémarré ou autre truc du genre.

LiveChat (écrit en PHP) utilise des fichiers textes avant de tout passer en BDD lorsque la conversation est terminée.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

ViPHP
ViPHP | 5924 Messages

14 janv. 2008, 23:28

Les tables memory seront plus rapide, mais par contre, il faut que le serveur SQL soit sur la même machine que le site.
Sinon, si c'est disponible, je crois que shmop_open() stocke directement en ram.

Edit : C'est shmop_open(), pas shmopen() :-/
Modifié en dernier par Sékiltoyai le 15 janv. 2008, 00:58, modifié 1 fois.

Eléphanteau du PHP | 45 Messages

15 janv. 2008, 00:44

OK, merci pour vos réponses, je vais mettre ca en place, je reviendrais sur ce post pour vous dire ce qu'il en est :P

Sinon, autres questions, dans le cas d'un chat one to one, est il judicieux d'utiliser le protocole IRC ?

Mammouth du PHP | 1885 Messages

15 janv. 2008, 01:35

OK, merci pour vos réponses, je vais mettre ca en place, je reviendrais sur ce post pour vous dire ce qu'il en est :P

Sinon, autres questions, dans le cas d'un chat one to one, est il judicieux d'utiliser le protocole IRC ?
Dans ce cas, PHP n'a plus rien à voir non? Il suffit d'installer un serveur IRC et que le client installe/utilise un client IRC et le tour est joué.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Mammouth du PHP | 881 Messages

15 janv. 2008, 04:12

Tu peux aussi faire appel à du PHP tout construit:

http://www.webdev.ro/products/webchat/ est le chat que j'utilise et ça fonctionne bien.

C'est une table Memory qui en est le coeur.
Soyez artisans de paix

Mammouth du PHP | 1885 Messages

15 janv. 2008, 05:00

Si tu n'es pas contraint de conserver des logs des conversations, alors le moteur de table MEMORY de MySQL peut être la solution.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP