Ejemplo Elysia: Gateway Micro Socket
Implementación en Elysia (Bun) del gateway Micro Socket: endpoints WebSocket (/ws, /ws/sub/:topic), modelo sub-socket y difusión escalable.
Resumen
El ejemplo está en examples/elysia-micro-socket/.
- WebSocket:
/ws(multi-topic) y/ws/sub/:topic(sub WebSocket). - Store sub-socket:
Map<topic, Set<connectionId>>; broadcast O(suscriptores) por topic. - Backbone en memoria; NATS/Kafka para escalado horizontal.
- Dedup (I₂) por messageId y usuario; Redis en producción.
- Auth demo: token no vacío; JWT + ACL en producción.
Ejecución
bash
cd examples/elysia-micro-socket
bun install
bun run dev| Recurso | URL |
|---|---|
| Docs + enviar peticiones WS | http://localhost:3000/docs — Connect, luego Send (setup, subscribe, publish); respuestas en el log |
| OpenAPI (Scalar) | http://localhost:3000/openapi |
| WebSocket (multi-topic) | ws://localhost:3000/ws |
| WebSocket (sub) | ws://localhost:3000/ws/sub/prices (ejemplo) |
| Estadísticas | GET http://localhost:3000/stats |
| Publicación demo | GET http://localhost:3000/demo/publish/:topic?key=value |
Enviar peticiones por WebSocket
- Abre http://localhost:3000/docs.
- En WebSocket elige URL: /ws o /ws/sub/prices (botones) y pulsa Connect.
- Mensaje setup (token), Send → en el log aparecen
readyysubscribedsi aplica. - Usa subscribe / unsubscribe / publish y Send para enviar; las respuestas aparecen en el log (← verde).
Protocolo (resumen)
| Cliente → Servidor | Servidor → Cliente |
|---|---|
setup + token (+ topics opcional) | ready + sessionId, subscribed (por URL/topics) |
subscribe + topic | subscribed + topic |
unsubscribe + topic | unsubscribed + topic |
publish + topic, messageId, payload | ack + messageId, status (ok | duplicate) |
| — | message + topic, seqNo, messageId, data |
| — | error + code, message |
Referencia completa (HTTP, mensajes, arquitectura): página en inglés.