# Reaaliaikaiset pelipalvelimet PlayDropissa: Colyseus ja MongoDB

Aja pelillesi isännöityä Colyseus 0.17 -palvelinta MongoDB-tietokannalla, yhdistä selaimesta SDK:lla, testaa kahdella pelaajalla ja tunne rajat.

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

PlayDrop voi isännöidä pelisi palvelinpuolen: tavallisen Colyseus-palvelimen omalla MongoDB-tietokannallaan, varmennetut pelaajat eikä ylläpidettävää infrastruktuuria. Käytä sitä reaaliaikaisiin otteluihin, vuoropohjaisiin peleihin, jaettuihin maailmoihin ja kaikkeen, missä pelaaja ei saa pystyä huijaamaan. Palvelin on valinnainen; pelisi voi myös kutsua itse isännöimääsi palvelinta.

## Kirjoita palvelin

Vie `rooms`-olio yhdestä ES-moduulista. PlayDrop käynnistää palvelimen; älä kutsu `listen()` äläkä määrittele `onAuth`, koska PlayDrop varmentaa jokaisen pelaajan ennen `onJoin`-kutsua.

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

Yhdistä MongoDB:hen huoneen elinkaaren sisällä, ei koskaan moduulin tasolla: `PLAYDROP_MONGO_URL` on olemassa vain ajon aikana. Luo indeksit kyselyillesi.

## Ilmoita se

Paketoi palvelin yhdeksi tiedostoksi ja osoita katalogi siihen:

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

Lataa se [paketissa](https://www.playdrop.ai/fi/create/learn/packaging); yksinkertainen HTML-tapa ei voi sisältää palvelinta.

## Isännöidyn ajoympäristön säännöt

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), MongoDB-ajuri 7.5, Node.js 24.22.1.
- Yksi itsenäinen ES-moduuli, enintään 2 MiB. Se voi tuoda vain paketit `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` ja `@playdrop/server`; paketoi kaikki muu mukaan.
- Enintään 2 huonetyyppiä, 8 pelaajaa huonetta kohden, 4 tuntia huonetta kohden, 30 viestiä sekunnissa pelaajaa kohden ja 512 KiB viestiä kohden.
- Ei internetyhteyttä: vain MongoDB ja PlayDropin palvelut ovat tavoitettavissa.
- Pelaajien on oltava kirjautuneita.
- Yksi tietokanta peliä kohden, säilyy versiosta toiseen ja lasketaan tekijän tallennustilaan. Älä koskaan lähetä sen osoitetta tai tunnistetietoja selaimeen.

## Yhdistä selaimesta

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

`join` hoitaa PlayDropin ryhmäpaikat ja kirjautumisen; katso [verkkoryhmät](https://www.playdrop.ai/fi/create/learn/online-party). Matalamman tason hallintaa varten `sdk.multiplayer.getConnection()` palauttaa `{ endpoint, token, expiresAt }` virallista Colyseus-asiakasohjelmaa varten, jonka saat kutsulla `sdk.libs.colyseus.load()`.

## Server SDK

`@playdrop/server` lisää luotetut alustakutsut: ystävät ja pelikortit (`playdrop.social`), ostojen varmennus (`playdrop.shop`), tekijän maksama tekoälyluonti (`playdrop.ai`) ja huoneen puhe (`playdrop.multiplayer.forRoom`). Ne toimivat vain palveluun ladatuissa peleissä. Katso [server SDK -viite](https://www.playdrop.ai/fi/create/learn/server-sdk).

## Testaa

Kehityksen aikana aja Colyseus 0.17:ää ja MongoDB:tä paikallisesti ja yhdistä paikallinen asiakasohjelmasi paikalliseen palvelimeesi. Testataksesi isännöityä palvelinta lataa yksityinen versio ja avaa `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1` ja sitten sama linkki arvolla `player=2` toisessa ikkunassa. Kumpikin ikkuna pelaa omana testipelaajanasi. Julkaise testattu versio kutsulla `publish_game_version`, kun se toimii.

Suunnittele yhteyskatkoja varten: Colyseuksen uudelleenyhdistäminen pitää paikan varattuna lyhyen ajan, ja huoneen tilan pitäisi antaa palaavan pelaajan jatkaa.

## Liittyvät oppaat

- [Verkkoryhmät ja puhe](https://www.playdrop.ai/fi/create/learn/online-party): Anna ystävien pelata yhdessä: ilmoita ryhmäkoot, avaa ryhmäikkuna, liity varattuihin huoneisiin sdk.multiplayer.join-kutsulla ja hallitse huoneen puhetta.
- [Server SDK](https://www.playdrop.ai/fi/create/learn/server-sdk): PlayDropin isännöimien pelipalvelinten viite: ajoympäristön säännöt, varmennettu PlayDropPlayer sekä social-, shop-, ai- ja multiplayer-palvelinrajapinnat.
- [Paketointi ja .play](https://www.playdrop.ai/fi/create/learn/packaging): Järjestä pelikansio, ZIP tai .play niin, että catalogue.json on juuressa, ilmoita pelisivun media ja palvelimet ja lataa prepare_catalogue_upload-kutsulla.
