# 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.

Source: https://www.playdrop.ai/es/create/learn/game-servers

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`.

```js
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:

```json
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }
```

Súbelo en un [paquete](https://www.playdrop.ai/es/create/learn/packaging); la vía de HTML simple no puede incluir un servidor.

## Reglas del entorno alojado

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.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`, `mongodb` y `@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

```js
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](https://www.playdrop.ai/es/create/learn/online-party). 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](https://www.playdrop.ai/es/create/learn/server-sdk).

## 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.

## Guías relacionadas

- [Grupos en línea y voz](https://www.playdrop.ai/es/create/learn/online-party): Deja que tus amigos jueguen en línea: declara tamaños de grupo, abre la ventana de grupo, entra en salas reservadas con sdk.multiplayer.join y gestiona la voz.
- [SDK de servidor](https://www.playdrop.ai/es/create/learn/server-sdk): Servidores alojados por PlayDrop: reglas del entorno, el PlayDropPlayer verificado y playdrop.social, playdrop.shop, playdrop.ai y playdrop.multiplayer.
- [Empaquetado y .play](https://www.playdrop.ai/es/create/learn/packaging): Organiza una carpeta, ZIP o .play compilado con catalogue.json en la raíz, declara medios de la ficha y servidores, y súbelo con prepare_catalogue_upload.
