Servidores de juego en tiempo real en PlayDrop: Colyseus y MongoDB
Ejecuta un servidor Colyseus 0.17 alojado con base de datos MongoDB, conéctate desde el navegador con el SDK, prueba con dos jugadores y conoce los límites.
PlayDrop puede alojar la parte de servidor de tu juego: un servidor Colyseus estándar con su propia base de datos MongoDB, jugadores verificados y ninguna infraestructura que gestionar. Úsalo para partidas en tiempo real, juegos por turnos, mundos compartidos y cualquier cosa en la que un jugador no deba poder hacer trampas. El servidor es opcional; tu juego también puede llamar a un servidor que alojes tú.
Escribe el servidor
Exporta un mapa rooms desde un único módulo ES. PlayDrop inicia el servidor; no llames a listen() ni definas onAuth, porque PlayDrop verifica a cada jugador antes de 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) };Conéctate a MongoDB dentro del ciclo de vida de la sala, nunca en el ámbito del módulo: PLAYDROP_MONGO_URL solo existe en tiempo de ejecución. Crea índices para tus consultas.
Decláralo
Agrupa el servidor en un solo archivo con un bundler y haz que el catálogo apunte a él:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }Súbelo en un paquete; la vía de HTML simple no puede incluir un servidor.
Reglas del entorno alojado
- Colyseus 0.17 (
colyseus0.17.10,@colyseus/schema4.0.30) y el controlador de MongoDB 7.5, sobre Node.js 24.22.1. - Un único módulo ES autónomo de 2 MiB como máximo. Solo puede importar
colyseus,@colyseus/core,@colyseus/schema,mongodby@playdrop/server; incluye todo lo demás dentro del módulo. - Hasta 2 tipos de sala, 8 jugadores por sala, 4 horas por sala, 30 mensajes por segundo por jugador y 512 KiB por mensaje.
- Sin acceso a internet: solo se puede llegar a MongoDB y a los servicios de PlayDrop.
- Los jugadores deben iniciar sesión.
- Una base de datos por juego, que se conserva entre versiones y cuenta para el almacenamiento del creador. Nunca envíes su dirección ni sus credenciales a un navegador.
Conéctate desde el navegador
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });join gestiona las plazas de los grupos de PlayDrop y el inicio de sesión; consulta grupos en línea. Para un control de más bajo nivel, sdk.multiplayer.getConnection() devuelve { endpoint, token, expiresAt } para el cliente oficial de Colyseus de sdk.libs.colyseus.load().
SDK de servidor
@playdrop/server añade llamadas de confianza a la plataforma: amigos y tarjetas de juego (playdrop.social), verificación de compras (playdrop.shop), generación con IA pagada por el creador (playdrop.ai) y voz de sala (playdrop.multiplayer.forRoom). Solo funcionan en juegos subidos. Consulta la referencia del SDK de servidor.
Prueba
Durante el desarrollo, ejecuta Colyseus 0.17 y MongoDB en local y conecta tu cliente local a tu servidor local. Para probar el servidor alojado, sube una versión privada y abre https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1 y, después, el mismo enlace con player=2 en una segunda ventana. Cada ventana juega como un jugador de prueba distinto tuyo. Cuando funcione, publica la versión probada con publish_game_version.
Prepara el juego para las desconexiones: la reconexión de Colyseus reserva una plaza durante poco tiempo, y el estado de la sala debe permitir que un jugador que vuelve pueda continuar.