Server di gioco in tempo reale su PlayDrop: Colyseus e MongoDB
Esegui un server Colyseus 0.17 ospitato con un database MongoDB, collegati dal browser con l’SDK, prova con due giocatori e conosci i limiti.
PlayDrop può ospitare la parte server del tuo gioco: un server Colyseus standard con un proprio database MongoDB, giocatori verificati e nessuna infrastruttura da gestire. Usalo per partite in tempo reale, giochi a turni, mondi condivisi e tutto ciò su cui un giocatore non deve poter barare. Un server è facoltativo; il tuo gioco può anche chiamare un server che ospiti tu.
Scrivi il server
Esporta una mappa rooms da un unico modulo ES. PlayDrop avvia il server; non chiamare listen() e non definire onAuth, perché PlayDrop verifica ogni giocatore prima di 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) };Collegati a MongoDB all’interno del ciclo di vita della stanza, mai a livello di modulo: PLAYDROP_MONGO_URL esiste solo durante l’esecuzione. Crea gli indici per le tue query.
Dichiaralo
Crea un bundle del server in un unico file e fai puntare il catalogo a quel file:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }Caricalo in un pacchetto; il percorso in HTML semplice non può includere un server.
Regole dell’ambiente ospitato
- Colyseus 0.17 (
colyseus0.17.10,@colyseus/schema4.0.30), driver MongoDB 7.5, su Node.js 24.22.1. - Un unico modulo ES autonomo di al massimo 2 MiB. Può importare solo
colyseus,@colyseus/core,@colyseus/schema,mongodbe@playdrop/server; includi nel bundle tutto il resto. - Fino a 2 tipi di stanza, 8 giocatori per stanza, 4 ore per stanza, 30 messaggi al secondo per giocatore e 512 KiB per messaggio.
- Nessun accesso a internet: sono raggiungibili solo MongoDB e i servizi di PlayDrop.
- I giocatori devono aver effettuato l’accesso.
- Un database per gioco, mantenuto tra le versioni e conteggiato nello spazio del creator. Non inviare mai il suo indirizzo o le sue credenziali a un browser.
Collegati dal browser
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });join gestisce i posti del gruppo di PlayDrop e l’accesso; vedi gruppi online. Per un controllo di livello più basso, sdk.multiplayer.getConnection() restituisce { endpoint, token, expiresAt } per il client Colyseus ufficiale di sdk.libs.colyseus.load().
SDK server
@playdrop/server aggiunge chiamate affidabili alla piattaforma: amici e carte di gioco (playdrop.social), verifica degli acquisti (playdrop.shop), generazione con l’IA pagata dal creator (playdrop.ai) e voce della stanza (playdrop.multiplayer.forRoom). Funzionano solo sui giochi caricati. Vedi il riferimento dell’SDK server.
Prova
Durante lo sviluppo, esegui Colyseus 0.17 e MongoDB in locale e collega il tuo client locale al tuo server locale. Per provare il server ospitato, carica una versione privata e apri https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1, poi lo stesso link con player=2 in una seconda finestra. Ogni finestra gioca come un tuo giocatore di prova separato. Quando funziona, pubblica la versione testata con publish_game_version.
Prevedi le disconnessioni: la riconnessione di Colyseus tiene un posto per poco tempo, e lo stato della stanza dovrebbe permettere a un giocatore che rientra di continuare.