Files
Wizard/wizard_server
marvinandClaude Opus 5.5 9ffee8b952 Document limits, load control and performance
- New docs/09-limits-and-performance.md: principles, all protection
  layers, what players see, configuration reference, measurements,
  tuning guide, monitoring and how to test
- Server chapter summarises the limits and links to chapter 9; circuit
  breaker description and AI_MAX_INFLIGHT default corrected
- Architecture: new files in the layout, design decisions for load
  handling; docs index lists chapter 9
- Protocol, AI and operations chapters link to chapter 9; test counts
- Root and component READMEs describe the limits and settings

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 13:04:21 +02:00
..
2026-09-27 09:52:00 +02:00
2026-09-27 09:52:00 +02:00
2026-09-27 09:52:00 +02:00
2026-09-27 09:52:00 +02:00
2026-09-27 09:52:00 +02:00

wizard_server

FastAPI game server. It manages sessions, lobbies and games, and talks to the AI service.

  • game_logic/ — the standalone rules engine (pip install ./game_logic, see its README).
  • app/main.py — routes: GET /health, WS /ws (browsers), WS /internal/ai (AI service, refused when the request came through the reverse proxy)
  • app/protocol.py — client message schema
  • app/service.py — dispatches client messages, reconnects sessions, cleanup
  • app/lobby.py — lobbies, seats, host actions, running games and AI turns
  • app/ai_bridge.py — request/response protocol with the AI service, random-move fallback, in-flight cap and circuit breaker
  • app/sessions.py — sessions (token based, survive reloads) and ordered websocket sending
  • app/limits.py — token bucket, per-IP rate limiter, connection limiter (abuse protection)
  • app/load.py — load monitor (event loop lag, CPU, cgroup throttling) with hysteresis; the service refuses new lobbies/games while overloaded or at MAX_ACTIVE_GAMES

Configuration (environment, all in app/config.py): AI_SHARED_SECRET, AI_DECISION_TIMEOUT (5s), AI_MOVE_DELAY (0.8s), TRICK_PAUSE (1.8s), SESSION_TTL (1800s), MAX_LOBBIES (1000), ALLOWED_ORIGINS, LOG_LEVEL, and the limits: MAX_CONNECTIONS (500), MAX_CONNECTIONS_PER_IP (10), MESSAGE_RATE/MESSAGE_BURST (10/30), LOBBY_CREATE_RATE (10/min), MAX_ACTIVE_GAMES (50), LOAD_* thresholds, AI_MAX_INFLIGHT (64), AI_BREAKER_FAILURES/AI_BREAKER_COOLDOWN (5/30s). See ../docs/04-server.md and ../docs/09-limits-and-performance.md.

pip install -r requirements-dev.txt
uvicorn app.main:app --reload
pytest