Realtime gameservers op PlayDrop: Colyseus en MongoDB
Draai een gehoste Colyseus 0.17-server met een MongoDB-database voor je game, verbind vanuit de browser met de SDK, test met twee spelers en ken de limieten.
PlayDrop kan de serverkant van je game hosten: een standaard Colyseus-server met een eigen MongoDB-database, geverifieerde spelers en geen infrastructuur om zelf te beheren. Gebruik hem voor realtime wedstrijden, beurtgebaseerde games, gedeelde werelden en alles waarbij een speler niet mag kunnen valsspelen. Een server is optioneel; je game kan ook een server aanroepen die je zelf host.
De server schrijven
Exporteer een rooms-map uit één ES-module. PlayDrop start de server; roep listen() niet aan en definieer geen onAuth, want PlayDrop verifieert elke speler vóór onJoin.
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) };Verbind met MongoDB binnen de levenscyclus van de kamer (room), nooit op moduleniveau: PLAYDROP_MONGO_URL bestaat alleen tijdens het draaien. Maak indexen aan voor je query's.
De server declareren
Bundel de server in één bestand en laat de catalogus ernaar verwijzen:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }Upload hem in een pakket; de eenvoudige HTML-route kan geen server meenemen.
Regels van de gehoste runtime
- Colyseus 0.17 (
colyseus0.17.10,@colyseus/schema4.0.30), MongoDB-driver 7.5, op Node.js 24.22.1. - Eén op zichzelf staande ES-module van maximaal 2 MiB. Hij mag alleen
colyseus,@colyseus/core,@colyseus/schema,mongodben@playdrop/serverimporteren; bundel al het andere. - Maximaal 2 kamertypen, 8 spelers per kamer, 4 uur per kamer, 30 berichten per seconde per speler en 512 KiB per bericht.
- Geen internettoegang: alleen MongoDB en PlayDrop-diensten zijn bereikbaar.
- Spelers moeten ingelogd zijn.
- Eén database per game, bewaard over versies heen en meegeteld in de opslag van de maker. Stuur het adres of de inloggegevens nooit naar een browser.
Verbinden vanuit de browser
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });join regelt de groepsplaatsen en het inloggen van PlayDrop; zie onlinegroepen. Voor meer controle op laag niveau geeft sdk.multiplayer.getConnection() { endpoint, token, expiresAt } terug voor de officiële Colyseus-client uit sdk.libs.colyseus.load().
Server-SDK
@playdrop/server voegt vertrouwde platformaanroepen toe: vrienden en gamekaarten (playdrop.social), verificatie van aankopen (playdrop.shop), AI-generatie betaald door de maker (playdrop.ai) en kamerspraak (playdrop.multiplayer.forRoom). Ze werken alleen bij geüploade games. Zie de referentie van de server-SDK.
Testen
Draai tijdens de ontwikkeling Colyseus 0.17 en MongoDB lokaal en verbind je lokale client met je lokale server. Om de gehoste server te testen upload je een privéversie en open je https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1, en daarna dezelfde link met player=2 in een tweede venster. Elk venster speelt als een aparte testspeler van jou. Publiceer de geteste versie met publish_game_version als het werkt.
Houd rekening met verbroken verbindingen: Colyseus houdt bij opnieuw verbinden een plaats korte tijd vrij, en de status van de kamer moet een terugkerende speler laten verdergaan.