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.
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.
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:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }Lade ihn in einem Paket hoch; der einfache HTML-Weg kann keinen Server mitbringen.
Regeln der gehosteten Laufzeitumgebung
- Colyseus 0.17 (
colyseus0.17.10,@colyseus/schema4.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,mongodbund@playdrop/serverimportieren; 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
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. 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.
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.