Un juego clásico de Snake que implementa procesamiento distribuido, balanceo de carga dinámico y monitoreo en tiempo real.
📋 Para ver los diagramas detallados de arquitectura, consultar Arquitectura.md
El sistema está diseñado como microservicios distribuidos con balanceo de carga dinámico y monitoreo en tiempo real.
- Multijugador en tiempo real (hasta 4 jugadores)
- Oponentes con IA (opcional)
- Sistema de puntuación
- Modo espectador cuando muere
- Controles con flechas o WASD
- Arquitectura de Microservicios para separación de responsabilidades
- Procesamiento Distribuido con Workers especializados para diferentes tareas
- Comunicación en Tiempo Real con WebSocket para actualizaciones instantáneas
- Balanceado de Carga Dinámico que distribuye tareas a workers según métricas
- Dashboard con métricas del sistema
- Docker y Docker Compose
- Python 3.11+
- 4GB RAM recomendado
.
├── backend/
│ ├── game_coordinator/ # Servidor principal del juego
│ │ ├── app/
│ │ │ ├── main.py # API y WebSocket endpoints
│ │ │ ├── game_logic.py # Lógica del juego
│ │ │ ├── game_state.py # Gestión de estados
│ │ │ └── ...
│ │ └── Dockerfile
│ ├── workers/ # Workers distribuidos
│ │ ├── worker.py # Implementación de workers
│ │ └── Dockerfile
│ └── monitor/ # Sistema de monitoreo
│ ├── resource_monitor.py
│ └── Dockerfile
├── frontend/
│ ├── index.html # Interfaz web
│ └── game.js # Cliente JavaScript
└── docker-compose.yml # Orquestación de servicios
# Construir e iniciar todos los servicios
docker-compose up --build
# O en modo detached
docker-compose up -d --builddocker-compose psAbrir en el navegador: frontend/index.html directamente del explorador de archivos.
- En la pestaña "Setup", hacer clic en "Create Game"
- Opcionalmente, activar "Enable AI opponent" para jugar contra la IA
- El sistema te unirá automáticamente al juego
- Hacer clic en "Start Game" para comenzar
- Jugador 1: Crear un juego y compartir el Game ID
- Otros jugadores: Ingresar el Game ID y hacer clic en "Join Game"
- El creador del juego hace clic en "Start Game" cuando todos estén listos
- Flechas o WASD: Mover la serpiente
- Espacio: Enviar ping (test de conexión)
- Comer la comida para crecer y sumar puntos.
- Evitar chocar con las paredes, la propia cola u otros jugadores.
- El último jugador en vivo gana.
REDIS_HOST=redis
REDIS_PORT=6379
GAME_TICK_RATE=100 # Velocidad del juego (ms)
MAX_PLAYERS_PER_GAME=4
GRID_SIZE=40x40WORKER_TYPE=LOGIC # Tipo: LOGIC, COLLISION, AI, FOOD
REDIS_HOST=redis
REDIS_PORT=6379# Escalar workers de lógica a 3 instancias
docker-compose up -d --scale logic_worker=3
# Escalar workers de colisión a 2 instancias
docker-compose up -d --scale collision_worker=2- Cambiar a la pestaña "Monitoring Dashboard" en la interfaz
- Ver métricas en tiempo real:
- Estado de workers por tipo
- Uso de CPU y RAM
- Profundidad de colas
- Latencia promedio
- Juegos activos y jugadores
# Estado de workers
curl http://localhost:8000/api/monitor/workers
# Métricas del juego
curl http://localhost:8000/api/monitor/games
# Métricas de rendimiento
curl http://localhost:8000/api/monitor/performance
# Dashboard de monitoreo completo
curl http://localhost:8001/healthPOST /api/games/create- Crear nuevo juegoPOST /api/games/{game_id}/join- Unirse a un juegoPOST /api/games/{game_id}/start- Iniciar juegoDELETE /api/games/{game_id}/leave- Abandonar juegoGET /api/games/list- Listar juegos activosGET /api/games/{game_id}/state- Obtener estado del juego
POST /api/games/{game_id}/move- Enviar movimientoPUT /api/games/{game_id}/players/{player_id}/color- Cambiar color
WS /ws/games/{game_id}- Conexión en tiempo real para actualizaciones del juego
POST /admin/reset- Reiniciar todo el sistemaPOST /admin/reset/games- Reiniciar solo juegosPOST /admin/reset/queues- Limpiar colas de tareas
