# PlayDrop-Spielserver: Colyseus, MongoDB und das Server-SDK

Optionaler gehosteter Multiplayer für PlayDrop-Spiele: Laden Sie eine Colyseus-server.js mit MongoDB-Speicher hoch, testen Sie sie mit Testspielern und nutzen Sie das optionale Server-SDK für Freunde und KI.

Source: https://www.playdrop.ai/de/docs/server-sdk

Ein Spielserver ist optional. Ihr Spiel kann jeden Server aufrufen, den Sie selbst betreiben. Wenn Sie möchten, hostet PlayDrop für Ihr Spiel einen Standard-Colyseus-Server mit einer MongoDB-Datenbank: Laden Sie ihn als `server.js` neben `index.html` über [PlayDrop Connector](https://www.playdrop.ai/de/docs/connectors) hoch oder lassen Sie ihn von [PlayDrop Cloud](https://www.playdrop.ai/de/create) erstellen. Auch das Paket `@playdrop/server` ist optional.

## Einen Standard-Colyseus-Server schreiben

Exportieren Sie aus `server.js` eine `rooms`-Map und tragen Sie deren Room-Namen in [catalogue.json](https://www.playdrop.ai/de/docs/catalogue-json) als `"server": { "rooms": ["game"] }` ein. PlayDrop führt den Server aus; starten Sie also selbst keinen. Speichern Sie Daten innerhalb des Room-Lebenszyklus mit dem Standard-MongoDB-Treiber über `PLAYDROP_MONGO_URL`.

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

class GameRoom extends Room {
  async onCreate() {
    this.mongo = new MongoClient(process.env.PLAYDROP_MONGO_URL);
    await this.mongo.connect();
  }
  onJoin(client) {
    // client.auth is the verified PlayDrop player, for example client.auth.userId.
  }
  async onDispose() { await this.mongo?.close(); }
}

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

## Regeln für gehostete Server

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), der MongoDB-Treiber 7.5 und Node 22.
- Ein einziges eigenständiges ES-Modul mit bis zu 2 MiB. Es darf nur `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` und `@playdrop/server` importieren; bündeln Sie jeden anderen Code in die Datei.
- Bis zu 2 Room-Typen, 8 Spieler pro Room, 4 Stunden pro Room, 30 Nachrichten pro Sekunde und Spieler sowie 512 KiB pro Nachricht.
- Kein Internetzugriff vom Server aus: Erreichbar sind nur MongoDB und PlayDrop-Dienste.
- Spieler müssen angemeldet sein. PlayDrop verifiziert jeden Spieler beim Beitritt; implementieren Sie kein `onAuth`.
- Eine MongoDB-Datenbank pro Spiel, die über Versionen hinweg erhalten bleibt und auf Ihr Speicherkontingent angerechnet wird. Senden Sie ihre Zugangsdaten niemals an den Browser.

## Browser verbinden und testen

Im Browser liefert `sdk.multiplayer.getConnection()` aus dem [Client-SDK](https://www.playdrop.ai/de/docs/sdk) die Serveradresse und das Token des Spielers; verbinden Sie sich damit über den Colyseus-Client (`@colyseus/sdk` 0.17). Führen Sie während der Entwicklung Colyseus 0.17 und MongoDB 8 lokal aus und verbinden Sie sich direkt mit Ihrem lokalen Server. Um den gehosteten Server zu testen, laden Sie eine private Version hoch und öffnen dann `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1` sowie denselben Link mit `player=2` in einem zweiten Fenster: Jedes Fenster spielt mit einem eigenen Testkonto. Wenn alles funktioniert, machen Sie die Version auf der Spielseite öffentlich.

## Optionales Server-SDK: Freunde und KI

`@playdrop/server` ergänzt `playdrop.social` (Freunde, die dieses Spiel spielen, und Spielkarten in PlayDrop Chat) und `playdrop.ai` (Generierung von Text, Bildern, 3D, Video, Sound, Sprache und Musik, bezahlt vom Creator). Diese Aufrufe funktionieren nur in hochgeladenen Spielen, nicht bei der lokalen Entwicklung. Laden Sie private generierte Medien auf dem Server mit `playdrop.ai.tasks.downloadFile` herunter und senden Sie die Bytes nur an den vorgesehenen Spieler; Anfragen zur Sprachgenerierung akzeptieren höchstens 40 Wörter.
