Real-time messaging infrastructure
Coderic Relay es un gateway de comunicación en tiempo real con Socket.io, Redis y Kafka.
npm install @coderic/relay# Con npx
npx @coderic/relay
# O con variables de entorno
PORT=5000 REDIS_URL=redis://localhost:6379 npx @coderic/relayimport{createRelay}from'@coderic/relay';constgateway=createRelay({port: 5000,redis: {url: 'redis://localhost:6379'},kafka: {brokers: ['localhost:9092']}});// Eventos personalizadosgateway.on('connection',(socket)=>{console.log('Nueva conexión:',socket.id);});gateway.on('message',({ socket, data })=>{console.log('Mensaje de',socket.data.usuario,':',data);});awaitgateway.start();import{RelayClient}from'@coderic/relay';constclient=newRelayClient('http://localhost:5000');awaitclient.connect();// Identificarseawaitclient.identificar('usuario123');// Enviar mensajesclient.enviar({texto: 'Hola mundo!'},'nosotros');// Escuchar mensajesclient.on('mensaje',(data)=>{console.log('Recibido:',data);});<scriptsrc="https://cdn.socket.io/4.7.5/socket.io.min.js"></script><script>constsocket=io('http://localhost:5000/relay');socket.on('connect',()=>{socket.emit('identificar','miUsuario',(ok)=>{console.log('Identificado:',ok);});});// Enviar mensaje a todossocket.emit('relay',{texto: 'Hola!',destino: 'nosotros'});// Recibir mensajessocket.on('relay',(data)=>{console.log('Mensaje:',data);});</script>| Evento | Descripción | Payload |
|---|---|---|
identificar | Identificar usuario | (userId, callback) |
unirse | Unirse a un room (v2.1) | (room, callback) |
notificar | Enviar notificación | { ...data, destino } |
relay | Canal genérico | { ...data, destino } |
| Destino | Descripción |
|---|---|
yo | Solo al emisor (default) |
ustedes | A todos menos el emisor |
nosotros | A todos incluyendo el emisor |
room | A todos en el room especificado (v2.1) |
// Unirse a un roomsocket.emit('unirse','aulaA');// Enviar a ese roomsocket.emit('relay',{destino: 'room',room: 'aulaA',tipo: 'mensaje',texto: 'Hola aula A'});| Variable | Descripción | Default |
|---|---|---|
PORT | Puerto del servidor | 5000 |
REDIS_URL | URL de Redis | - |
KAFKA_BROKERS | Brokers Kafka (comma-separated) | - |
INSTANCE_ID | ID de instancia | process.pid |
constgateway=createRelay({port: 5000,instanceId: 'gateway-1',namespace: '/relay',cors: {origin: '*',methods: ['GET','POST']},metrics: true,redis: {url: 'redis://localhost:6379',options: {/* ioredis options */}},kafka: {brokers: ['localhost:9092'],topic: 'relay-events',options: {/* kafkajs options */}},httpHandler: (req,res)=>{/* custom handler */}});gateway.on('ready',({ port })=>{});gateway.on('connection',(socket)=>{});gateway.on('disconnect',({ socket, reason })=>{});gateway.on('user:identified',({ usuario, socketId })=>{});gateway.on('message',({ socket, data })=>{});gateway.on('notify',({ socket, data })=>{});gateway.on('redis:connected',()=>{});gateway.on('redis:error',(error)=>{});gateway.on('kafka:connected',()=>{});gateway.on('kafka:error',(error)=>{});| Endpoint | Descripción |
|---|---|
/health | Health check (JSON) |
/metrics | Métricas Prometheus |
docker pull coderic/relayFROM coderic/relay:latest
ENV PORT=5000
ENV REDIS_URL=redis://redis:6379
ENV KAFKA_BROKERS=kafka:9092
EXPOSE 5000
CMD ["node", "src/server.js"]4 ejemplos: Básico, Rooms, Video, Llamadas WebRTC
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Tracking de pedidos
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Reserva de eventos
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Reserva de autobuses (React)
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Reserva de vuelos (Angular)
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Reserva de hoteles (Vue.js)
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Reserva de asientos de cine (Svelte)
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Pagos P2P estilo Nequi (Vue.js)
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Sistema de subastas en tiempo real (React)
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
Sistema de cola tipo banco
- 📦 Repositorio | 🐛 Issues | 🌐 Demo
MIT © Coderic