S42Core SSE Clase
SSE - s42-core
La clase SSE
(Server-Sent Events) del paquete s42-core
simplifica la creación de flujos de comunicación en tiempo real en aplicaciones web. Proporciona una forma fácil de enviar eventos desde el servidor a los clientes conectados utilizando el protocolo de Server-Sent Events.
Propósito
SSE
está diseñado para la comunicación en tiempo real, unidireccional, del servidor al cliente. Es particularmente útil en escenarios como:
- Notificaciones en vivo (por ejemplo, nuevos mensajes, actualizaciones del sistema).
- Monitoreo en tiempo real (por ejemplo, precios de acciones, estado del servidor).
- Difusión de eventos (por ejemplo, actividad del usuario en aplicaciones colaborativas).
Instalación
Instala el paquete s42-core
:
npm install s42-core
Características
- Comunicación en tiempo real: Envía eventos del servidor a los clientes con un overhead mínimo.
- Difusión de eventos: Transmite eventos a múltiples clientes simultáneamente.
- Fácil de usar: API sencilla para gestionar conexiones y enviar eventos.
- Integración con Controladores: Funciona perfectamente con las clases
Controller
yRouteControllers
.
Uso
Configuración de SSE en un Controlador
import { SSE, Controller, RouteControllers, Server } from 's42-core';
// Mapa para almacenar los listeners SSEconst sseListeners = new Map<string, Function>();
// Controlador SSEconst sseController = new Controller('GET', '/sse', async (req, res) => { const sse = new SSE(req); sseListeners.set(sse.getUUID(), (eventName: string, eventPayload: Record<string, any>) => { sse.send({ eventName, eventPayload }); });
return sse.getResponse();});
// Controlador 404 de ejemploconst controller404 = new Controller('*', '*', async (req, res) => { console.info('404 - No se encontró una ruta correspondiente'); sseListeners.forEach((listener, uuid) => { listener('404', { url: req.url }); });
return res.text('No encontrado');});
// Iniciar el servidor(async () => { const server = new Server();
await server.start({ port: 4555, RouteControllers: new RouteControllers([ sseController, controller404, ]), });
console.info(`Servidor iniciado en el puerto: ${server.getPort()}`);})();
Enviar Eventos
Para transmitir eventos a todos los clientes conectados:
sseListeners.forEach((listener) => { listener('nombre_evento', { mensaje: '¡Hola Mundo!' });});
Ejemplo de Escenario
Caso de Uso: Notificaciones en Tiempo Real
- Conexión del Cliente: Los clientes se conectan al endpoint
/sse
para establecer una conexión SSE. - Transmisión de Eventos: El servidor transmite eventos (por ejemplo, nuevas notificaciones) a todos los clientes conectados.
Ejemplo del Lado del Cliente (JavaScript)
const eventSource = new EventSource('/sse');
eventSource.onmessage = (event) => { console.log('Recibido:', event.data);};
eventSource.addEventListener('nombre_evento', (event) => { console.log('Evento Personalizado:', JSON.parse(event.data));});
Métodos
Constructor
constructor(req: Request)
req
: El objetoRequest
de la solicitud HTTP entrante.
getResponse(): Response
Devuelve el objeto Response
para enviar de vuelta al cliente.
getUUID(): string
Devuelve un identificador único para la instancia SSE.
send(data: TypeSSEventToSend): void
Envía un evento al cliente conectado.
data
: Un objeto que contiene:eventName
: El nombre del evento.eventPayload
: La carga útil del evento.
close(): void
Cierra la conexión SSE.
Integración con s42-core
La clase SSE
funciona perfectamente con las clases Controller
, RouteControllers
y Server
del paquete s42-core
. Está diseñada para integrarse fácilmente en la arquitectura de tu aplicación.
Ventajas
- Ligero: Configuración mínima para comunicación en tiempo real.
- Escalable: Maneja múltiples conexiones de manera eficiente.
- API Simple: Métodos intuitivos para gestionar conexiones SSE.
- Flexibilidad de Eventos: Soporta eventos personalizados y cargas útiles de datos.
Licencia
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.