Aller au contenu
NestJS OpenPartie 12, section a
Changer de langue : lire en anglais

a · Loup-Garou multijoueur

Construire un backend scalable pour un Loup-Garou en ligne, capable de supporter 10 000 joueurs connectés simultanément, répartis dans des centaines de villages.

Objectif Cible
Latence réseau < 100 ms (p95)
Connexions WebSocket par instance 10 000
Scalabilité Horizontale (microservices)
Information cachée Aucun rôle ni action secrète ne fuite vers un client non autorisé
Reconnexion Transparente, sans perte d’état

Inclus : authentification, salons publics et privés, matchmaking par niveau, moteur de jeu (phases jour et nuit, rôles, votes), chat par canal (village, loups, morts), mode spectateur, reconnexion, classements et statistiques par rôle.

Exclus : client (web ou mobile), paiements in-game, modération avancée par IA.

Une partie suit une state machine :

LOBBY → DISTRIBUTION → NUIT → AUBE → JOUR → VOTE → CRÉPUSCULE → NUIT … → TERMINÉE

Chaque nuit se résout dans un ordre fixe : Cupidon (première nuit seulement), la voyante, les loups-garous, puis la sorcière. Le serveur applique les effets (morts, amoureux, potions) à l’aube. La partie s’arrête dès qu’un camp remplit sa condition de victoire.

Le jeu repose sur l’information cachée : le serveur est le seul à connaître tous les rôles. Chaque message envoyé à un client est filtré selon ce que ce joueur a le droit de savoir.

Version du cours Version complète
Monolithe NestJS Microservices derrière une API Gateway
Appels de fonctions entre modules gRPC en synchrone, Kafka pour les événements de partie
Une instance WebSocket Socket.io avec l’adaptateur Redis
Rôles de base (loups, villageois, voyante, sorcière) Rôles configurables, ajout de rôles par plugin
Docker Compose Kubernetes, OpenTelemetry, Grafana

NestJS 12, PostgreSQL 16, Redis 7 en cluster, Kafka, gRPC, Socket.io, Passport + JWT, Docker et Kubernetes.

Environ 16 semaines : authentification, salons et matchmaking, moteur de jeu et rôles, WebSocket et reconnexion, chat par canal, spectateurs, classements, tests de charge, déploiement.