# Serwery gier czasu rzeczywistego w PlayDrop: Colyseus i MongoDB

Uruchom hostowany serwer Colyseus 0.17 z bazą MongoDB dla swojej gry, łącz się z przeglądarki przez SDK, testuj z dwoma graczami i poznaj limity.

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

PlayDrop może hostować serwerową część twojej gry: standardowy serwer Colyseus z własną bazą danych MongoDB, zweryfikowanymi graczami i bez infrastruktury do utrzymywania. Używaj go do meczów w czasie rzeczywistym, gier turowych, wspólnych światów i wszystkiego, w czym gracz nie powinien móc oszukiwać. Serwer jest opcjonalny; twoja gra może też wywoływać serwer, który hostujesz sam.

## Napisz serwer

Wyeksportuj mapę `rooms` z jednego modułu ES. PlayDrop sam uruchamia serwer; nie wywołuj `listen()` ani nie definiuj `onAuth`, ponieważ PlayDrop weryfikuje każdego gracza przed `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) };
```

Łącz się z MongoDB w cyklu życia pokoju, nigdy na poziomie modułu: `PLAYDROP_MONGO_URL` istnieje tylko w czasie działania. Utwórz indeksy dla swoich zapytań.

## Zadeklaruj go

Spakuj serwer do jednego pliku i wskaż go w katalogu:

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

Prześlij go w [pakiecie](https://www.playdrop.ai/pl/create/learn/packaging); gra przesłana jako prosty plik HTML nie może mieć serwera.

## Zasady hostowanego środowiska

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), sterownik MongoDB 7.5, na Node.js 24.22.1.
- Jeden samodzielny moduł ES o rozmiarze najwyżej 2 MiB. Może importować tylko `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` i `@playdrop/server`; resztę spakuj do pliku.
- Do 2 typów pokoi, 8 graczy w pokoju, 4 godziny na pokój, 30 wiadomości na sekundę na gracza i 512 KiB na wiadomość.
- Brak dostępu do internetu: osiągalne są tylko MongoDB i usługi PlayDrop.
- Gracze muszą być zalogowani.
- Jedna baza danych na grę, zachowywana między wersjami i wliczana do miejsca twórcy. Nigdy nie wysyłaj jej adresu ani danych uwierzytelniających do przeglądarki.

## Połącz się z przeglądarki

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

`join` obsługuje miejsca w grupach PlayDrop i logowanie; zobacz [grupy online](https://www.playdrop.ai/pl/create/learn/online-party). Jeśli potrzebujesz kontroli na niższym poziomie, `sdk.multiplayer.getConnection()` zwraca `{ endpoint, token, expiresAt }` dla oficjalnego klienta Colyseus z `sdk.libs.colyseus.load()`.

## SDK serwera

`@playdrop/server` dodaje zaufane wywołania platformy: znajomych i karty gier (`playdrop.social`), weryfikację zakupów (`playdrop.shop`), generowanie z AI opłacane przez twórcę (`playdrop.ai`) i głos pokoju (`playdrop.multiplayer.forRoom`). Działają tylko w przesłanych grach. Zobacz [dokumentację SDK serwera](https://www.playdrop.ai/pl/create/learn/server-sdk).

## Testuj

Podczas tworzenia uruchom lokalnie Colyseus 0.17 i MongoDB i połącz lokalnego klienta z lokalnym serwerem. Aby przetestować hostowany serwer, prześlij wersję prywatną i otwórz `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1`, a potem ten sam link z `player=2` w drugim oknie. Każde okno gra jako osobny twój gracz testowy. Gdy wszystko działa, opublikuj przetestowaną wersję przez `publish_game_version`.

Projektuj z myślą o rozłączeniach: mechanizm ponownego łączenia Colyseus zachowuje miejsce gracza przez krótki czas, a stan pokoju powinien pozwolić powracającemu graczowi grać dalej.

## Powiązane poradniki

- [Grupy online i głos](https://www.playdrop.ai/pl/create/learn/online-party): Pozwól znajomym grać razem online: zadeklaruj rozmiary grup, otwórz okno grupy, dołączaj do zarezerwowanych pokoi przez sdk.multiplayer.join i steruj głosem.
- [SDK serwera](https://www.playdrop.ai/pl/create/learn/server-sdk): Serwery gier hostowane przez PlayDrop: zasady środowiska, zweryfikowany PlayDropPlayer oraz playdrop.social, playdrop.shop, playdrop.ai i playdrop.multiplayer.
- [Pakowanie i .play](https://www.playdrop.ai/pl/create/learn/packaging): Zbudowana gra w folderze, ZIP lub .play z catalogue.json w katalogu głównym: media strony gry, serwery i przesyłanie przez prepare_catalogue_upload.
