Contexto
Epitalk es una aplicación de chat inspirada en el funcionamiento de los servidores IRC clásicos, que permite a los usuarios comunicarse en tiempo real en salones públicos o mediante mensajes privados.
El proyecto fue desarrollado como parte de un trabajo académico en Epitech, con el objetivo de diseñar una aplicación de mensajería en tiempo real completa y accesible directamente desde un navegador.
En lugar de utilizar WebSockets, como en la mayoría de las aplicaciones de chat modernas, la aplicación emplea Mercure y Server-Sent Events (SSE) para explorar otro enfoque en la gestión de comunicaciones en tiempo real entre el servidor y los clientes.
La aplicación está completamente funcional y es accesible públicamente: los usuarios solo deben elegir un seudónimo para unirse al chat de inmediato.
Problema
Crear una aplicación de mensajería en tiempo real implica varios desafíos técnicos:
- Sincronizar los mensajes entre múltiples usuarios y dispositivos
- Gestionar la creación y administración de salones de discusión
- Mantener el estado de los usuarios conectados
- Transmitir eventos sin recargar la página
Las soluciones clásicas suelen utilizar WebSockets, pero existen otras arquitecturas para gestionar flujos en tiempo real.
El objetivo del proyecto era, por tanto, diseñar una aplicación de chat moderna mientras se experimentaba con una arquitectura basada en Mercure y Server-Sent Events.
Solución
Epitalk se basa en una arquitectura en tiempo real que combina un backend en AdonisJS y el protocolo Mercure para difundir eventos hacia los clientes.
Los clientes se conectan a un flujo SSE que permite recibir actualizaciones instantáneas del servidor: nuevos mensajes, llegada de usuarios, creación de salones o cambios de estado.
La interfaz frontend está desarrollada con Vue 3 y TypeScript, con gestión de estado mediante Pinia, lo que permite ofrecer una interfaz fluida similar a las aplicaciones de chat modernas.
El usuario solo debe introducir un seudónimo para unirse al servidor e iniciar la conversación al instante.
Funcionalidades principales
- Conexión instantánea al chat mediante seudónimo
- Salones de discusión públicos (channels)
- Mensajería privada entre usuarios
- Creación y eliminación de channels
- Lista de usuarios conectados en un salón
- Comandos IRC clásicos (/join, /list, /users, /nick, /create, /delete, /msg, /leave)
- Bot integrado para responder comandos
- Actualización en tiempo real de mensajes y eventos
- Detección de usuarios en línea
- Interfaz responsive compatible con móviles y escritorio
Resultados
Epitalk demuestra la implementación de una aplicación de chat en tiempo real completa utilizando una arquitectura basada en Mercure y Server-Sent Events.
El proyecto destaca:
- La gestión de eventos en tiempo real en el lado del cliente y el servidor
- La sincronización instantánea de datos entre múltiples usuarios
- El diseño de una interfaz de chat moderna con Vue.js
Además, constituye una demostración de una arquitectura alternativa a los WebSockets para aplicaciones que requieren actualizaciones en tiempo real.