# Echtzeit-Spielserver auf PlayDrop: Colyseus und MongoDB

Gehosteter Colyseus-0.17-Server mit MongoDB-Datenbank für dein Spiel: Verbindung per SDK aus dem Browser, Test mit zwei Spielern und die Grenzen.

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

PlayDrop kann die Serverseite deines Spiels hosten: einen Standard-Colyseus-Server mit eigener MongoDB-Datenbank, verifizierten Spielern und ohne Infrastruktur, die du betreiben musst. Nutze ihn für Echtzeit-Matches, rundenbasierte Spiele, gemeinsame Welten und alles, bei dem Schummeln unmöglich sein muss. Ein Server ist optional; dein Spiel kann auch einen Server aufrufen, den du selbst hostest.

## Server schreiben

Exportiere eine `rooms`-Map aus einem einzigen ES-Modul. PlayDrop startet den Server; rufe nicht `listen()` auf und definiere kein `onAuth`, weil PlayDrop jeden Spieler vor `onJoin` verifiziert.

```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) };
```

Verbinde dich innerhalb des Raum-Lebenszyklus mit MongoDB, nie auf Modulebene: `PLAYDROP_MONGO_URL` existiert nur zur Laufzeit. Lege Indizes für deine Abfragen an.

## Server deklarieren

Bündle den Server in eine Datei und lass den Katalog darauf verweisen:

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

Lade ihn in einem [Paket](https://www.playdrop.ai/de/create/learn/packaging) hoch; der einfache HTML-Weg kann keinen Server mitbringen.

## Regeln der gehosteten Laufzeitumgebung

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), MongoDB-Treiber 7.5, auf Node.js 24.22.1.
- Ein eigenständiges ES-Modul von höchstens 2 MiB. Es darf nur `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` und `@playdrop/server` importieren; bündle alles andere mit.
- Bis zu 2 Raumtypen, 8 Spieler pro Raum, 4 Stunden pro Raum, 30 Nachrichten pro Sekunde und Spieler und 512 KiB pro Nachricht.
- Kein Internetzugang: Nur MongoDB und PlayDrop-Dienste sind erreichbar.
- Spieler müssen angemeldet sein.
- Eine Datenbank pro Spiel, die über Versionen hinweg erhalten bleibt und auf den Speicherplatz des Creators angerechnet wird. Sende ihre Adresse oder Zugangsdaten niemals an einen Browser.

## Aus dem Browser verbinden

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

`join` kümmert sich um die Party-Plätze und die Anmeldung von PlayDrop; siehe [Online-Partys](https://www.playdrop.ai/de/create/learn/online-party). Für mehr Kontrolle auf niedriger Ebene liefert `sdk.multiplayer.getConnection()` das Objekt `{ endpoint, token, expiresAt }` für den offiziellen Colyseus-Client aus `sdk.libs.colyseus.load()`.

## Server-SDK

`@playdrop/server` ergänzt vertrauenswürdige Plattformaufrufe: Freunde und Spielkarten (`playdrop.social`), Kaufprüfung (`playdrop.shop`), KI-Generierung auf Kosten des Creators (`playdrop.ai`) und Raum-Sprachchat (`playdrop.multiplayer.forRoom`). Sie funktionieren nur bei hochgeladenen Spielen. Siehe die [Referenz zum Server-SDK](https://www.playdrop.ai/de/create/learn/server-sdk).

## Testen

Führe während der Entwicklung Colyseus 0.17 und MongoDB lokal aus und verbinde deinen lokalen Client mit deinem lokalen Server. Um den gehosteten Server zu testen, lade eine private Version hoch und öffne `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1`, dann denselben Link mit `player=2` in einem zweiten Fenster. Jedes Fenster spielt als eigener Testspieler von dir. Veröffentliche die getestete Version mit `publish_game_version`, sobald sie funktioniert.

Plane Verbindungsabbrüche ein: Die Wiederverbindung von Colyseus hält einen Platz für kurze Zeit frei, und der Zustand des Raums sollte es einem zurückkehrenden Spieler erlauben weiterzuspielen.

## Verwandte Anleitungen

- [Online-Partys und Sprachchat](https://www.playdrop.ai/de/create/learn/online-party): Freunde online zusammen spielen lassen: Partygrößen deklarieren, Party-Fenster öffnen, mit sdk.multiplayer.join reservierte Räume betreten, Sprachchat steuern.
- [Server-SDK](https://www.playdrop.ai/de/create/learn/server-sdk): Referenz für gehostete Spielserver: Laufzeitregeln, verifizierter PlayDropPlayer, playdrop.social, playdrop.shop, playdrop.ai und playdrop.multiplayer.
- [Pakete und .play](https://www.playdrop.ai/de/create/learn/packaging): Build-Ordner, ZIP oder .play mit catalogue.json im Stammverzeichnis anlegen, Medien und Server deklarieren und mit prepare_catalogue_upload hochladen.
