# Spelservrar i realtid på PlayDrop: Colyseus och MongoDB

Kör en hostad Colyseus 0.17-server med en MongoDB-databas för ditt spel, anslut från webbläsaren med SDK:t, testa med två spelare och känn till gränserna.

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

PlayDrop kan hosta serverdelen av ditt spel: en vanlig Colyseus-server med en egen MongoDB-databas, verifierade spelare och ingen infrastruktur att driva. Använd den för matcher i realtid, turordningsbaserade spel, delade världar och allt som en spelare inte får kunna fuska med. En server är valfri; ditt spel kan också anropa en server som du hostar själv.

## Skriv servern

Exportera en `rooms`-karta från en ES-modul. PlayDrop startar servern; anropa inte `listen()` och definiera inte `onAuth`, eftersom PlayDrop verifierar varje spelare före `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) };
```

Anslut till MongoDB inom rummets livscykel, aldrig på modulnivå: `PLAYDROP_MONGO_URL` finns bara när servern körs. Skapa index för dina frågor.

## Deklarera den

Bunta ihop servern till en fil och peka katalogen mot den:

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

Ladda upp den i ett [paket](https://www.playdrop.ai/sv/create/learn/packaging); den enkla HTML-vägen kan inte ha med en server.

## Regler för den hostade körmiljön

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), MongoDB-drivrutin 7.5, på Node.js 24.22.1.
- En fristående ES-modul på högst 2 MiB. Den får bara importera `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` och `@playdrop/server`; bunta ihop allt annat.
- Upp till 2 rumstyper, 8 spelare per rum, 4 timmar per rum, 30 meddelanden per sekund och spelare och 512 KiB per meddelande.
- Ingen internetåtkomst: bara MongoDB och PlayDrops tjänster går att nå.
- Spelare måste vara inloggade.
- En databas per spel, som behålls mellan versioner och räknas in i skaparens lagring. Skicka aldrig dess adress eller inloggningsuppgifter till en webbläsare.

## Anslut från webbläsaren

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

`join` hanterar PlayDrops gruppplatser och inloggning; se [onlinegrupper](https://www.playdrop.ai/sv/create/learn/online-party). För mer kontroll på lägre nivå returnerar `sdk.multiplayer.getConnection()` `{ endpoint, token, expiresAt }` för den officiella Colyseus-klienten från `sdk.libs.colyseus.load()`.

## Server-SDK

`@playdrop/server` lägger till betrodda plattformsanrop: vänner och spelkort (`playdrop.social`), verifiering av köp (`playdrop.shop`), AI-generering som skaparen betalar (`playdrop.ai`) och rumsröst (`playdrop.multiplayer.forRoom`). De fungerar bara i uppladdade spel. Se [referensen för server-SDK:t](https://www.playdrop.ai/sv/create/learn/server-sdk).

## Testa

Under utvecklingen kör du Colyseus 0.17 och MongoDB lokalt och ansluter din lokala klient till din lokala server. För att testa den hostade servern laddar du upp en privat version och öppnar `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1`, och sedan samma länk med `player=2` i ett andra fönster. Varje fönster spelar som en separat testspelare som hör till dig. Publicera den testade versionen med `publish_game_version` när den fungerar.

Planera för frånkopplingar: Colyseus-återanslutningen håller en plats en kort stund, och rummets tillstånd bör låta en återvändande spelare fortsätta.

## Relaterade guider

- [Onlinegrupper och röst](https://www.playdrop.ai/sv/create/learn/online-party): Låt vänner spela ihop online: deklarera gruppstorlekar, öppna PlayDrops gruppfönster, gå med i reserverade rum med sdk.multiplayer.join och styr rumsröst.
- [Server-SDK](https://www.playdrop.ai/sv/create/learn/server-sdk): Referens för spelservrar som PlayDrop hostar: regler för körmiljön, den verifierade PlayDropPlayer och server-API:erna social, shop, ai och multiplayer.
- [Paketering och .play](https://www.playdrop.ai/sv/create/learn/packaging): Lägg upp en byggd spelmapp, ZIP eller .play med catalogue.json i roten, deklarera media för spelsidan och servrar och ladda upp med prepare_catalogue_upload.
