# Serveurs de jeu temps réel sur PlayDrop : Colyseus et MongoDB

Faites héberger un serveur Colyseus 0.17 avec base MongoDB pour votre jeu, connectez le navigateur avec le SDK, testez à deux joueurs et connaissez les limites.

Source: https://www.playdrop.ai/fr/create/learn/game-servers

PlayDrop peut héberger la partie serveur de votre jeu : un serveur Colyseus standard avec sa propre base de données MongoDB, des joueurs vérifiés et aucune infrastructure à gérer. Utilisez-le pour les matchs en temps réel, les jeux au tour par tour, les mondes partagés et tout ce sur quoi un joueur ne doit pas pouvoir tricher. Un serveur est facultatif ; votre jeu peut aussi appeler un serveur que vous hébergez vous-même.

## Écrivez le serveur

Exportez un mappage `rooms` depuis un seul module ES. PlayDrop démarre le serveur : n’appelez pas `listen()` et ne définissez pas `onAuth`, car PlayDrop vérifie chaque joueur avant `onJoin`.

```js
import { Room, defineRoom } from "colyseus";
import { MongoClient } from "mongodb";

class GameRoom extends Room {
  maxClients = 8;
  async onCreate() {
    this.mongo = new MongoClient(process.env.PLAYDROP_MONGO_URL);
    await this.mongo.connect();
    this.onMessage("move", (client, move) => this.applyMove(client.auth.userId, move));
  }
  onJoin(client) {
    // client.auth is the verified PlayDrop player: userId, username, appRole, isTestPlayer…
  }
  async onDispose() { await this.mongo?.close(); }
}

export const rooms = { game: defineRoom(GameRoom) };
```

Connectez-vous à MongoDB pendant le cycle de vie de la salle, jamais au niveau du module : `PLAYDROP_MONGO_URL` n’existe qu’à l’exécution. Créez des index pour vos requêtes.

## Déclarez-le

Regroupez le serveur dans un seul fichier et indiquez-le dans le catalogue :

```json
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }
```

Envoyez-le dans un [paquet](https://www.playdrop.ai/fr/create/learn/packaging) ; la voie HTML simple ne peut pas inclure de serveur.

## Règles de l’environnement hébergé

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), pilote MongoDB 7.5, sur Node.js 24.22.1.
- Un seul module ES autonome de 2 MiB maximum. Il ne peut importer que `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` et `@playdrop/server` ; intégrez tout le reste dans le fichier.
- Jusqu’à 2 types de salles, 8 joueurs par salle, 4 heures par salle, 30 messages par seconde par joueur et 512 KiB par message.
- Aucun accès à Internet : seuls MongoDB et les services PlayDrop sont accessibles.
- Les joueurs doivent être connectés.
- Une base de données par jeu, conservée d’une version à l’autre et comptabilisée dans le stockage du créateur. N’envoyez jamais son adresse ni ses identifiants à un navigateur.

## Connectez le navigateur

```js
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });
```

`join` gère les places des groupes PlayDrop et la connexion des joueurs ; consultez [groupes en ligne](https://www.playdrop.ai/fr/create/learn/online-party). Pour un contrôle de plus bas niveau, `sdk.multiplayer.getConnection()` renvoie `{ endpoint, token, expiresAt }` pour le client Colyseus officiel issu de `sdk.libs.colyseus.load()`.

## SDK serveur

`@playdrop/server` ajoute des appels de confiance à la plateforme : amis et cartes de jeu (`playdrop.social`), vérification des achats (`playdrop.shop`), génération par IA payée par le créateur (`playdrop.ai`) et voix de salle (`playdrop.multiplayer.forRoom`). Ils ne fonctionnent que dans les jeux envoyés sur PlayDrop. Consultez la [référence du SDK serveur](https://www.playdrop.ai/fr/create/learn/server-sdk).

## Tester

Pendant le développement, exécutez Colyseus 0.17 et MongoDB en local et connectez votre client local à votre serveur local. Pour tester le serveur hébergé, envoyez une version privée et ouvrez `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1`, puis le même lien avec `player=2` dans une seconde fenêtre. Chaque fenêtre joue avec un joueur de test distinct qui vous appartient. Publiez la version testée avec `publish_game_version` quand tout fonctionne.

Prévoyez les déconnexions : la reconnexion de Colyseus garde une place pendant un court moment, et l’état de la salle doit permettre à un joueur qui revient de continuer.

## Guides associés

- [Groupes en ligne et voix](https://www.playdrop.ai/fr/create/learn/online-party): Faites jouer des amis ensemble en ligne : tailles de groupe, fenêtre de groupe PlayDrop, salles réservées avec sdk.multiplayer.join et voix de salle.
- [SDK serveur](https://www.playdrop.ai/fr/create/learn/server-sdk): Serveurs de jeu hébergés par PlayDrop : règles d’exécution, PlayDropPlayer vérifié, playdrop.social, playdrop.shop, playdrop.ai et playdrop.multiplayer.
- [Paquets et .play](https://www.playdrop.ai/fr/create/learn/packaging): Organisez un dossier, ZIP ou .play compilé avec catalogue.json à la racine, déclarez médias de fiche et serveurs, puis envoyez avec prepare_catalogue_upload.
