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';
const gateway = createRelay({
port: 5000,
redis: { url: 'redis://localhost:6379' },
kafka: { brokers: ['localhost:9092'] }
});
// Eventos personalizados
gateway.on('connection', (socket) => {
console.log('Nueva conexión:', socket.id);
});
gateway.on('message', ({ socket, data }) => {
console.log('Mensaje de', socket.data.usuario, ':', data);
});
await gateway.start();import { RelayClient } from '@coderic/relay';
const client = new RelayClient('http://localhost:5000');
await client.connect();
// Identificarse
await client.identificar('usuario123');
// Enviar mensajes
client.enviar({ texto: 'Hola mundo!' }, 'nosotros');
// Escuchar mensajes
client.on('mensaje', (data) => {
console.log('Recibido:', data);
});<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
<script>
const socket = io('http://localhost:5000/relay');
socket.on('connect', () => {
socket.emit('identificar', 'miUsuario', (ok) => {
console.log('Identificado:', ok);
});
});
// Enviar mensaje a todos
socket.emit('relay', {
texto: 'Hola!',
destino: 'nosotros'
});
// Recibir mensajes
socket.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 room
socket.emit('unirse', 'aulaA');
// Enviar a ese room
socket.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 |
const gateway = 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