# Servidores de juego de PlayDrop: Colyseus, MongoDB y el SDK de servidor

Multijugador alojado opcional para juegos de PlayDrop: sube un server.js de Colyseus con almacenamiento en MongoDB, pruébalo con jugadores de prueba y usa el SDK de servidor opcional para amigos e IA.

Source: https://www.playdrop.ai/es/docs/server-sdk

Un servidor de juego es opcional. Tu juego puede llamar a cualquier servidor que gestiones tú mismo. Si lo prefieres, PlayDrop aloja para tu juego un servidor Colyseus estándar con una base de datos MongoDB: súbelo como `server.js` junto a `index.html` mediante [PlayDrop Connector](https://www.playdrop.ai/es/docs/connectors), o pide a [PlayDrop Cloud](https://www.playdrop.ai/es/create) que lo cree. El paquete `@playdrop/server` también es opcional.

## Escribe un servidor Colyseus estándar

Exporta un mapa `rooms` desde `server.js` y enumera los nombres de sus salas en [catalogue.json](https://www.playdrop.ai/es/docs/catalogue-json) como `"server": { "rooms": ["game"] }`. PlayDrop ejecuta el servidor, así que no lo inicies tú. Guarda los datos con el controlador estándar de MongoDB mediante `PLAYDROP_MONGO_URL`, dentro del ciclo de vida de la sala.

```js
import { Room, defineRoom } from "colyseus";
import { MongoClient } from "mongodb";

class GameRoom extends Room {
  async onCreate() {
    this.mongo = new MongoClient(process.env.PLAYDROP_MONGO_URL);
    await this.mongo.connect();
  }
  onJoin(client) {
    // client.auth is the verified PlayDrop player, for example client.auth.userId.
  }
  async onDispose() { await this.mongo?.close(); }
}

export const rooms = { game: defineRoom(GameRoom) };
```

## Reglas del servidor alojado

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), el controlador de MongoDB 7.5 y Node 22.
- Un único módulo ES autocontenido de hasta 2 MiB. Solo puede importar `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` y `@playdrop/server`; incluye cualquier otro código en el propio archivo.
- 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 desde el servidor: solo se puede acceder a MongoDB y a los servicios de PlayDrop.
- Los jugadores deben haber iniciado sesión. PlayDrop verifica a cada jugador cuando se une; no implementes `onAuth`.
- Una base de datos MongoDB por juego, que se conserva entre versiones y cuenta para tu cuota de almacenamiento. Nunca envíes sus credenciales al navegador.

## Conecta el navegador y prueba

En el navegador, `sdk.multiplayer.getConnection()` del [SDK de cliente](https://www.playdrop.ai/es/docs/sdk) devuelve la dirección del servidor y el token del jugador; únete con el cliente de Colyseus (`@colyseus/sdk` 0.17). Durante el desarrollo, ejecuta Colyseus 0.17 y MongoDB 8 en local y conéctate directamente 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 el mismo enlace con `player=2` en una segunda ventana: cada ventana juega con una cuenta de prueba distinta. Cuando funcione, haz pública la versión desde la página del juego.

## SDK de servidor opcional: amigos e IA

`@playdrop/server` añade `playdrop.social` (amigos que juegan a este juego y tarjetas de juego en PlayDrop Chat) y `playdrop.ai` (generación de texto, imágenes, 3D, video, sonido, voz y música que paga el creador). Estas llamadas solo funcionan en juegos subidos, no en el desarrollo local. Descarga en el servidor el contenido multimedia privado generado con `playdrop.ai.tasks.downloadFile` y envía los bytes solo al jugador previsto; las solicitudes de voz aceptan como máximo 40 palabras.
