Récemment, PHPChina a lancé un sujet spécial sur la technologie des salons de discussion PHP. Je travaille récemment sur ce projet, je voudrais donc exprimer ici mon point de vue personnel.
Principales fonctions du salon de discussion :
1. Inscrivez-vous, connectez-vous, déconnectez-vous, modifiez les informations.
2. L'utilisateur demande à créer une salle de discussion et personnalise les attributs de la salle de discussion.
3. Affichez le nom de la salle de discussion, la description, le modérateur, les annonces et les publicités.
4. Affichez la liste des utilisateurs en ligne en temps réel et vous pouvez consulter les informations sur les utilisateurs en ligne (pseudo, email, IP, heure de connexion, etc.).
5. Publiez du contenu de discussion, des attributs de police, des actions, des expressions et des expressions courantes.
6. Permet l'invisibilité, le chat privé, le défilement, le blocage des utilisateurs, l'effacement de l'écran, la sélection de scènes de chat, la musique de fond et la personnalisation de la méthode d'envoi.
7. Les administrateurs ont le droit de gérer les membres (les expulser, leur interdire de parler et transférer les droits de gestion).
Choses à noter :
1. Il est interdit d'utiliser la structure frame (iframe n'apporte aucun avantage sauf réduire votre charge de travail)
2. Le code frontal et le code d'arrière-plan sont complètement séparés, les données ne sont transmises que via le canal ajax et seules les données nécessaires doivent être transmises. (Afficher les données au premier plan et traiter les données en arrière-plan)
3. Il est interdit d'actualiser la page entière provoquée par le programme, et de mettre à jour uniquement le contenu qui doit être modifié (il est interdit d'utiliser l'en-tête et la méta pour actualiser la page).
4. Lorsque vous soumettez du contenu de chat, vous ne pouvez pas rechercher aveuglément la vitesse de l'expérience utilisateur et ignorer l'ordre réel de soumission des enregistrements de chat. (C'est-à-dire que les enregistrements de discussion soumis doivent être réorganisés dans l'ordre réel sur le serveur puis transmis au client, car plusieurs personnes peuvent soumettre des informations en même temps)
Technologies utilisées :
1. Le pont entre le front et le backend-AJAX. Vous pouvez choisir jquery, XAJAX. Je préfère jquery, qui est rapide, simple et durable, possède de nombreux plug-ins et est mis à jour rapidement.
2. La forme du support de données-XML. En fait, les données générales des salles de discussion ne sont pas très compliquées et json suffit.
3. Couche d'abstraction de base de données-ADODB. Il est plus rapide d'utiliser PDO. Je suis déjà habitué à utiliser ADODB.
4. Le support de stockage de données sous-jacent - MySQL. Cela ne fait aucun doute.
5. Support de stockage intermédiaire de données-memcache. Stockez les données de lecture et d'écriture à grande vitesse dans la mémoire partagée Memcache pour réduire la charge sur la base de données.
6. Si vous souhaitez implémenter la vidéo et la voix, vous avez besoin de la prise en charge du serveur FMS (flash media server) et le client doit installer Flash Player. Et cela implique une interaction de données entre HTML, Javascript, Flash et l'arrière-plan. Il n'y a pas beaucoup d'informations à ce sujet.
Il s'agit des technologies de base. Dans le développement d'applications, de nombreux problèmes détaillés doivent encore être résolus.
Par exemple : Comment gérer les mises à jour des listes en ligne ?
Il existe deux manières :
1. Actualisez toute la liste (qu'il y ait des mises à jour ou non).
2. Ajoutez de nouveaux membres en ligne, supprimez des membres hors ligne et modifiez les membres dont les informations ont changé.
La deuxième option est évidemment la meilleure.
Comment gérer les problèmes de concurrence XmlHttpRequest ?
JavaScript est monothread. S'il y a deux objets XmlHttpRequest en même temps, des problèmes peuvent facilement survenir, ce qui nous oblige à contrôler la génération et la fin de XmlHttpRequest.
Dans le salon de discussion, les données que nous devons mettre à jour comprennent principalement : la liste en ligne (y compris les mises à jour des informations sur les membres), les enregistrements de chat, les attributs du salon de discussion, etc. La fréquence de ces mises à jour est incohérente (si les horaires sont cohérents, il vous suffit de créer un XmlHttpRequest pour le gérer). La mise à jour de l’historique des discussions prend moins de temps et la mise à jour des listes en ligne peut prendre un peu plus de temps. Sans utiliser de framework, si vous créez des objets XmlHttpRequest séparément, des problèmes de concurrence sont susceptibles de se produire. Cela nécessite la création d’une fonction de contrôle du temps et des processus.
setInterval('process_control()',3000) //Appelé une fois toutes les trois secondes
La fonction process_control implémente la planification des tâches, comme l'exécution de tâches à un certain intervalle et l'exécution de la tâche suivante uniquement une fois la tâche terminée.