Arriba

¿Cómo funciona el chat?

Imagine una situación en la que un servicio tiene 1000 salas de 50 usuarios en cada una. ¿Cómo se comporta el chat con tanta carga? Los recursos y la arquitectura necesarios de los microservicios son los siguientes.

La base del chat es el intercambio de datos entre el navegador y el servidor mientras se envían y reciben mensajes a través de una conexión permanente. Esta conexión es proporcionada por la tecnología WebSocket (Protocolo WebSocket). Es especialmente bueno para servicios que necesitan un intercambio de datos constante, como juegos en línea, mercados en tiempo real, etc.

A través de estos protocolos, todos los usuarios se conectan al servidor Comet [CppComet] (http://comet-server.com/), que funciona con tecnología Comet. Está escrito en C ++ y es multiproceso, por lo que puede manejar una carga pesada. CppComet proporciona una API para enviar mensajes desde el backend del chat al frontend a través de websockets, es decir, una descripción del proceso de envío. En general, una API es un conjunto de funciones que describen las condiciones para la interacción entre dos programas o dos sitios.

El backend de chat está escrito en PHP y diseñado como un complemento para el CMS de octubre. Esta plataforma proporciona un panel de administración conveniente, funciones para trabajar con archivos del sitio y muchos otros complementos adicionales que pueden resultarle útiles. Además, October CMS es un sistema bastante flexible y rápido basado en Laravel. Esto no ralentiza el código en comparación con escribir el código sin usar el CMS. October CMS también proporciona un mecanismo de almacenamiento en caché para elegir: Redis, Memcached o caché de archivos.

El chat frontend está escrito en JavaScript usando JQuery. MySQL o MariaDB se utiliza para administrar la base de datos .

Se realizó una prueba de carga del chat. Pero el comportamiento de los usuarios afectará significativamente la frecuencia con la que envían mensajes y cambian de diálogo. Si el usuario está en línea, pero no hace nada, solo carga un poco el servidor. Si realiza acciones activas, envía mensajes, sus solicitudes deben ser procesadas por el servidor y los mensajes se almacenan en la base de datos. Estos artículos describen el mecanismo de prueba de carga de chat y los resultados de la prueba. Un servidor económico puede manejar toda esta carga.

Hay otro gran mecanismo integrado en el chat: almacenamiento en caché de chat en la API de base de datos indexada . Es una base de datos que se puede utilizar dentro de cualquier navegador para almacenar grandes cantidades de datos. Al cambiar de diálogo, el usuario obtiene el resultado del caché local de su navegador al instante. Y luego, en segundo plano, se envía una solicitud desde el servidor para verificar los mensajes que no estaban en la caché. Este mecanismo permite que el chat funcione incluso cuando no hay conexión a Internet. Los datos de correspondencia simplemente se recuperarán de la caché. Y si el usuario escribe un mensaje, irá al caché del navegador y se transmitirá al servidor en segundo plano cuando se reanude la red. Como resultado, gracias al almacenamiento en caché de todos los mensajes y diálogos en IndexedDB, el usuario casi siempre recibe una respuesta al instante, incluso antes de que el servidor la procese. Y, si el servidor está sobrecargado, el mensaje puede tardar un poco más. Pero el chat en sí seguirá funcionando.

Si el chat funciona en una aplicación Cordova , los archivos de los mensajes (imágenes, audio, etc.) también ingresan al caché y la aplicación funciona como un mensajero estándar.

También hay un proyecto real con una carga de trabajo real para 130.000 usuarios, que tienen muchos diálogos y 2 GB de fotos y otros archivos al día. Y el chat hace un gran trabajo con él. También en el sitio web de GisAuto se instala un chat basado en CppComet. Funciona de forma estable y no hubo problemas graves durante el año de funcionamiento.

Otros artículos: