Skip to content

✨ Feature: Canales tipo Room para agrupación de usuarios #2

@NeftaliYagua

Description

@NeftaliYagua

📋 Descripción

Añadir funcionalidad de canales/rooms para permitir agrupación de usuarios y comunicación dirigida a grupos específicos, manteniendo la filosofía de simplicidad y agnosticismo de Pasarela.

🎯 Objetivo

Permitir que los usuarios se unan a "rooms" o canales específicos y recibir mensajes solo de esos canales, sin afectar la comunicación global existente.

💡 Casos de Uso

  • Chats grupales: Usuarios en una sala de chat específica
  • Partidas de juego: Jugadores en la misma partida
  • Proyectos colaborativos: Equipos trabajando en el mismo proyecto
  • Streaming en vivo: Audiencia de un streamer específico
  • Soporte técnico: Conversaciones por ticket/caso
  • Eventos: Asistentes a un evento específico

🔧 Propuesta de API

Nuevos Eventos

// Unirse a un room
socket.emit('unirse_room', 'room-id', callback);

// Salir de un room
socket.emit('salir_room', 'room-id', callback);

// Listar rooms del usuario
socket.emit('listar_rooms', callback);

// Enviar mensaje a un room específico
socket.emit('pasarela', {
  destino: 'room',
  room: 'room-id',
  data: { mensaje: 'Hola room!' }
});

Compatibilidad con API Actual

La API actual debe seguir funcionando:

  • destino: 'nosotros' → Todos los usuarios conectados
  • destino: 'ustedes' → Todos menos el emisor
  • destino: 'yo' → Solo el emisor
  • destino: 'room' → Solo usuarios en el room especificado (NUEVO)

🏗️ Consideraciones Técnicas

Escalabilidad

  • Los rooms deben funcionar correctamente con múltiples instancias de Pasarela
  • Usar Redis Adapter para sincronizar rooms entre instancias
  • Considerar límites de rooms por usuario si es necesario

Persistencia

  • Los rooms pueden ser temporales (solo mientras hay usuarios) o persistentes
  • Considerar si necesitamos persistir metadata de rooms (nombre, descripción, etc.)

Seguridad

  • ¿Permitir rooms públicos o privados?
  • ¿Necesitamos autenticación/autorización para unirse a rooms?
  • ¿Límites de usuarios por room?

Métricas

  • Añadir métricas de Prometheus para:
    • Número de rooms activos
    • Usuarios por room
    • Mensajes por room

📝 Notas de Diseño

  • Mantener la simplicidad: rooms son solo identificadores de strings
  • No imponer lógica de negocio: los proyectos definen qué es un "room"
  • Compatibilidad hacia atrás: la API actual debe seguir funcionando
  • Agnóstico: un room puede ser cualquier identificador (chat-id, game-id, project-id, etc.)

🔗 Relacionado

Esta funcionalidad complementaría perfectamente ejemplos como:

  • Chat en tiempo real (rooms = salas de chat)
  • Sistema de cola de turnos (rooms = tipos de servicio)
  • Booking de eventos (rooms = eventos específicos)

📌 Etiquetas Sugeridas

enhancement feature v3.0

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions