# Server game realtime di PlayDrop: Colyseus dan MongoDB

Jalankan server Colyseus 0.17 yang di-hosting dengan MongoDB untuk game Anda, hubungkan dari browser lewat SDK, uji dengan dua pemain, dan pahami batasnya.

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

PlayDrop bisa meng-hosting sisi server game Anda: server Colyseus standar dengan database MongoDB sendiri, pemain yang terverifikasi, dan tanpa infrastruktur yang perlu Anda jalankan. Gunakan untuk pertandingan realtime, game berbasis giliran, dunia bersama, dan apa pun yang tidak boleh bisa dicurangi pemain. Server bersifat opsional; game Anda juga bisa memanggil server yang Anda hosting sendiri.

## Tulis servernya

Ekspor map `rooms` dari satu modul ES. PlayDrop yang memulai server; jangan memanggil `listen()` atau mendefinisikan `onAuth`, karena PlayDrop memverifikasi setiap pemain sebelum `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) };
```

Hubungkan ke MongoDB di dalam siklus hidup room, jangan pernah di level modul: `PLAYDROP_MONGO_URL` hanya ada saat server berjalan. Buat indeks untuk kueri Anda.

## Deklarasikan

Bundel server ke dalam satu berkas dan arahkan katalog ke berkas itu:

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

Unggah dalam [paket](https://www.playdrop.ai/id/create/learn/packaging); jalur HTML sederhana tidak bisa membawa server.

## Aturan runtime yang di-hosting

- Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30), driver MongoDB 7.5, di Node.js 24.22.1.
- Satu modul ES mandiri berukuran maksimal 2 MiB. Modul hanya boleh mengimpor `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb`, dan `@playdrop/server`; bundel semua yang lain.
- Maksimal 2 jenis room, 8 pemain per room, 4 jam per room, 30 pesan per detik per pemain, dan 512 KiB per pesan.
- Tanpa akses internet: hanya MongoDB dan layanan PlayDrop yang bisa dijangkau.
- Pemain harus masuk.
- Satu database per game, dipertahankan di semua versi dan dihitung dalam penyimpanan kreator. Jangan pernah mengirim alamat atau kredensialnya ke browser.

## Hubungkan dari 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` menangani kursi grup dan login PlayDrop; lihat [grup online](https://www.playdrop.ai/id/create/learn/online-party). Untuk kendali tingkat rendah, `sdk.multiplayer.getConnection()` mengembalikan `{ endpoint, token, expiresAt }` untuk klien Colyseus resmi dari `sdk.libs.colyseus.load()`.

## SDK server

`@playdrop/server` menambahkan panggilan platform tepercaya: teman dan kartu game (`playdrop.social`), verifikasi pembelian (`playdrop.shop`), pembuatan AI yang dibayar kreator (`playdrop.ai`), dan suara ruang (`playdrop.multiplayer.forRoom`). Panggilan ini hanya berjalan di game yang sudah diunggah. Lihat [referensi SDK server](https://www.playdrop.ai/id/create/learn/server-sdk).

## Uji

Selama pengembangan, jalankan Colyseus 0.17 dan MongoDB secara lokal, lalu hubungkan klien lokal ke server lokal Anda. Untuk menguji server yang di-hosting, unggah versi privat dan buka `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1`, lalu tautan yang sama dengan `player=2` di jendela kedua. Setiap jendela bermain sebagai pemain uji Anda yang berbeda. Terbitkan versi yang sudah diuji dengan `publish_game_version` setelah berfungsi.

Rancang untuk koneksi yang terputus: fitur sambung ulang Colyseus menyimpan kursi untuk waktu singkat, dan status room harus memungkinkan pemain yang kembali untuk melanjutkan.

## Panduan terkait

- [Grup online dan suara](https://www.playdrop.ai/id/create/learn/online-party): Ajak teman bermain online bersama: deklarasikan ukuran grup, buka jendela grup PlayDrop, gabung ke room lewat sdk.multiplayer.join, dan atur suara ruang.
- [SDK server](https://www.playdrop.ai/id/create/learn/server-sdk): Referensi server game yang di-hosting PlayDrop: aturan runtime, PlayDropPlayer terverifikasi, playdrop.social, playdrop.shop, playdrop.ai, playdrop.multiplayer.
- [Pengemasan dan .play](https://www.playdrop.ai/id/create/learn/packaging): Susun folder hasil build, ZIP, atau .play dengan catalogue.json di root, deklarasikan media listingan dan server, lalu unggah dengan prepare_catalogue_upload.
