# Sanntidsservere for spill på PlayDrop: Colyseus og MongoDB

Kjør en hostet Colyseus 0.17-server med en MongoDB-database for spillet ditt, koble til fra nettleseren med SDK-en, test med to spillere og kjenn grensene.

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

PlayDrop kan hoste serversiden av spillet ditt: en standard Colyseus-server med sin egen MongoDB-database, verifiserte spillere og ingen infrastruktur å drifte. Bruk den til kamper i sanntid, turbaserte spill, delte verdener og alt en spiller ikke skal kunne jukse med. En server er valgfri; spillet ditt kan også kalle en server du hoster selv.

## Skriv serveren

Eksporter et `rooms`-kart fra én ES-modul. PlayDrop starter serveren; ikke kall `listen()` og ikke definer `onAuth`, fordi PlayDrop verifiserer hver spiller før `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) };
```

Koble til MongoDB inne i romlivssyklusen, aldri på modulnivå: `PLAYDROP_MONGO_URL` finnes bare under kjøring. Lag indekser for spørringene dine.

## Deklarer den

Bunt serveren i én fil og la katalogen peke på den:

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

Last den opp i en [pakke](https://www.playdrop.ai/nb/create/learn/packaging); den enkle HTML-veien kan ikke ha med en server.

## Regler for den hostede kjøretiden

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), MongoDB-driveren 7.5, på Node.js 24.22.1.
- Én selvstendig ES-modul på høyst 2 MiB. Den kan bare importere `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` og `@playdrop/server`; bunt alt annet inn i filen.
- Opptil 2 romtyper, 8 spillere per rom, 4 timer per rom, 30 meldinger per sekund per spiller og 512 KiB per melding.
- Ingen internettilgang: bare MongoDB og PlayDrop-tjenester er tilgjengelige.
- Spillere må være logget inn.
- Én database per spill, beholdt på tvers av versjoner og regnet med i skaperens lagringsplass. Send aldri adressen eller påloggingsopplysningene til en nettleser.

## Koble til fra nettleseren

```js
const sdk = await playdrop.init();
const room = await sdk.multiplayer.join("game");
room.onStateChange((state) => render(state));
room.send("move", { x: 1 });
```

`join` håndterer PlayDrops gruppeplasser og innlogging; se [nettgrupper](https://www.playdrop.ai/nb/create/learn/online-party). For mer detaljert kontroll returnerer `sdk.multiplayer.getConnection()` `{ endpoint, token, expiresAt }` for den offisielle Colyseus-klienten fra `sdk.libs.colyseus.load()`.

## Server-SDK

`@playdrop/server` legger til klarerte plattformkall: venner og spillkort (`playdrop.social`), verifisering av kjøp (`playdrop.shop`), KI-generering betalt av skaperen (`playdrop.ai`) og romstemme (`playdrop.multiplayer.forRoom`). De kjører bare på opplastede spill. Se [referansen for server-SDK-en](https://www.playdrop.ai/nb/create/learn/server-sdk).

## Test

Under utvikling kjører du Colyseus 0.17 og MongoDB lokalt og kobler den lokale klienten til den lokale serveren. For å teste den hostede serveren laster du opp en privat versjon og åpner `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1`, deretter den samme lenken med `player=2` i et nytt vindu. Hvert vindu spiller som en egen testspiller på kontoen din. Publiser den testede versjonen med `publish_game_version` når den fungerer.

Planlegg for brudd i tilkoblingen: gjenoppkobling i Colyseus holder av en plass en kort stund, og romtilstanden bør la en spiller som kommer tilbake, fortsette.

## Relaterte veiledninger

- [Nettgrupper og stemme](https://www.playdrop.ai/nb/create/learn/online-party): La venner spille sammen på nett: deklarer gruppestørrelser, åpne PlayDrops gruppevindu, bli med i reserverte rom med sdk.multiplayer.join og styr romstemme.
- [Server-SDK](https://www.playdrop.ai/nb/create/learn/server-sdk): Referanse for spillservere hostet av PlayDrop: kjøretidsregler, den verifiserte PlayDropPlayer og server-API-ene social, shop, ai og multiplayer.
- [Pakking og .play](https://www.playdrop.ai/nb/create/learn/packaging): Organiser en ferdigbygd spillmappe, ZIP eller .play med catalogue.json i roten, deklarer oppføringsmedier og servere, og last opp med prepare_catalogue_upload.
