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

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

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

```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) };
```

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:

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

Caricalo in un [pacchetto](https://www.playdrop.ai/it/create/learn/packaging); il percorso in HTML semplice non può includere un server.

## Regole dell’ambiente ospitato

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

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

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

## Guide correlate

- [Gruppi online e voce](https://www.playdrop.ai/it/create/learn/online-party): Fai giocare gli amici insieme online: dimensioni dei gruppi, finestra del gruppo di PlayDrop, stanze riservate con sdk.multiplayer.join e voce della stanza.
- [SDK server](https://www.playdrop.ai/it/create/learn/server-sdk): Riferimento per i server di gioco ospitati da PlayDrop: regole di esecuzione, il PlayDropPlayer verificato e playdrop.social, shop, ai e multiplayer.
- [Pacchetti e .play](https://www.playdrop.ai/it/create/learn/packaging): Organizza una cartella compilata, uno ZIP o un .play con catalogue.json nella radice, dichiara scheda e server e caricalo con prepare_catalogue_upload.
