Recientemente, PHPChina lanzó un tema especial sobre la tecnología de salas de chat PHP. Recientemente estoy trabajando en este proyecto, por lo que me gustaría expresar mis puntos de vista personales aquí.
Funciones principales de la sala de chat:
1. Registrarse, iniciar sesión, cerrar sesión, modificar información.
2. El usuario solicita crear una sala de chat y personaliza los atributos de la sala de chat.
3. Muestre el nombre, la descripción, el moderador, los anuncios y los anuncios de la sala de chat.
4. Muestre la lista de usuarios en línea en tiempo real y podrá ver la información del usuario en línea (apodo, correo electrónico, IP, tiempo en línea, etc.).
5. Publique contenido del chat, atributos de fuente, acciones, expresiones y frases comunes.
6. Permite invisibilidad, chat privado, desplazamiento, bloqueo de usuarios, limpieza de pantalla, selección de escenas de chat, música de fondo y personalización del método de envío.
7. Los administradores tienen derecho a gestionar a los miembros (expulsarlos, prohibirles hablar y transferir derechos de gestión).
Cosas a tener en cuenta:
1. Está prohibido utilizar una estructura de marco (iframe no aporta ningún beneficio excepto reducir su carga de trabajo)
2. El código de front-end y de fondo están completamente separados, los datos solo se transmiten a través del canal ajax y solo se deben transmitir los datos necesarios. (Mostrar datos en primer plano y procesar datos en segundo plano)
3. Está prohibido actualizar toda la página causada por el programa y solo actualizar el contenido que debe cambiarse (está prohibido usar encabezados y meta para actualizar la página).
4. Al enviar contenido de chat, no se puede perseguir ciegamente la velocidad de la experiencia del usuario e ignorar el orden de envío de registros de chat real. (Es decir, los registros de chat enviados deben reorganizarse en el orden real en el servidor y luego transmitirse al cliente, porque muchas personas pueden enviar información al mismo tiempo)
Tecnologías utilizadas:
1. El puente entre el front-end y el backend-AJAX. Puedes elegir jquery, XAJAX. Prefiero jquery, que es rápido, simple y duradero, tiene muchos complementos y se actualiza rápidamente.
2. La forma del soporte de datos XML. De hecho, los datos generales de la sala de chat no son muy complicados y json es suficiente.
3. Capa de abstracción de la base de datos: ADODB. Es más rápido usar PDO. Ya estoy acostumbrado a usar ADODB.
4. El medio de almacenamiento de datos subyacente: MySQL. No hay duda sobre esto.
5. Medio de almacenamiento intermedio de datos: Memcache. Almacene datos de lectura y escritura de alta velocidad en la memoria compartida de Memcache para reducir la carga de la base de datos.
6. Si desea implementar video y voz, necesita el soporte del servidor FMS (servidor de medios flash) y el cliente debe instalar Flash Player. E implica interacción de datos entre html, javascript, flash y el fondo. No hay mucha información sobre esto.
Estas son las tecnologías centrales. En el desarrollo de aplicaciones reales, todavía quedan muchos problemas detallados que deben resolverse.
Por ejemplo: ¿Cómo manejar las actualizaciones de las listas en línea?
Hay dos maneras:
1. Actualizar la lista completa (si hay actualizaciones o no).
2. Agregue nuevos miembros en línea, elimine miembros fuera de línea y cambie miembros cuya información haya cambiado.
Evidentemente la segunda opción es la mejor.
¿Cómo lidiar con los problemas de concurrencia de XmlHttpRequest?
JavaScript tiene un solo subproceso. Si hay dos objetos XmlHttpRequest al mismo tiempo, pueden ocurrir problemas fácilmente, lo que requiere que controlemos la generación y finalización de XmlHttpRequest.
En la sala de chat, los datos que necesitamos actualizar incluyen principalmente: lista en línea (incluidas actualizaciones de la información de los miembros), registros de chat, atributos de la sala de chat, etc. La frecuencia de estas actualizaciones es inconsistente (si los tiempos son consistentes, solo necesita crear un XmlHttpRequest para manejarlo). El historial de chat tarda menos en actualizarse y las listas en línea pueden tardar un poco más en actualizarse. Sin utilizar un marco, si crea objetos XmlHttpRequest por separado, es probable que se produzcan problemas de concurrencia. Esto requiere crear una función de control de tiempos y procesos.
setInterval('process_control()',3000) // Llamado una vez cada tres segundos
La función Process_Control implementa la programación de tareas, como ejecutar tareas en un intervalo determinado y ejecutar la siguiente tarea solo después de que se completa la tarea.