# PlayDrop’ta gerçek zamanlı oyun sunucuları: Colyseus ve MongoDB

Oyunun için MongoDB veritabanlı, barındırılan bir Colyseus 0.17 sunucusu çalıştır, tarayıcıdan SDK ile bağlan, iki oyuncuyla test et ve sınırları öğren.

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

PlayDrop oyununun sunucu tarafını barındırabilir: kendi MongoDB veritabanı ve doğrulanmış oyuncuları olan, senin altyapı işletmeni gerektirmeyen standart bir Colyseus sunucusu. Bunu gerçek zamanlı maçlar, sıra tabanlı oyunlar, paylaşılan dünyalar ve bir oyuncunun hile yapamaması gereken her şey için kullan. Sunucu isteğe bağlıdır; oyunun kendi barındırdığın bir sunucuyu da çağırabilir.

## Sunucuyu yaz

Tek bir ES modülünden bir `rooms` haritası dışa aktar. Sunucuyu PlayDrop başlatır; `listen()` çağırma ya da `onAuth` tanımlama, çünkü PlayDrop her oyuncuyu `onJoin` öncesinde doğrular.

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

MongoDB’ye modül kapsamında değil, her zaman oda yaşam döngüsü içinde bağlan: `PLAYDROP_MONGO_URL` yalnızca çalışma zamanında vardır. Sorguların için dizinler oluştur.

## Bildir

Sunucuyu tek bir dosyada paketle ve kataloğu ona yönlendir:

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

Onu bir [paket](https://www.playdrop.ai/tr/create/learn/packaging) içinde yükle; basit HTML yolu sunucu taşıyamaz.

## Barındırılan çalışma zamanının kuralları

- Node.js 24.22.1 üzerinde Colyseus 0.17 (`colyseus` 0.17.10, `@colyseus/schema` 4.0.30) ve MongoDB sürücüsü 7.5.
- En fazla 2 MiB boyutunda, kendi içinde eksiksiz tek bir ES modülü. Yalnızca `colyseus`, `@colyseus/core`, `@colyseus/schema`, `mongodb` ve `@playdrop/server` içe aktarabilir; geri kalan her şeyi pakete dahil et.
- En fazla 2 oda türü, oda başına 8 oyuncu, oda başına 4 saat, oyuncu başına saniyede 30 mesaj ve mesaj başına 512 KiB.
- İnternet erişimi yok: yalnızca MongoDB ve PlayDrop hizmetlerine ulaşılabilir.
- Oyuncuların giriş yapmış olması gerekir.
- Oyun başına bir veritabanı; sürümler arasında korunur ve yapımcının depolama alanından sayılır. Adresini ya da kimlik bilgilerini asla bir tarayıcıya gönderme.

## Tarayıcıdan bağlan

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

`join`, PlayDrop’un parti yerlerini ve girişi yönetir; bkz. [çevrimiçi partiler](https://www.playdrop.ai/tr/create/learn/online-party). Daha alt düzey kontrol için `sdk.multiplayer.getConnection()`, `sdk.libs.colyseus.load()` ile gelen resmi Colyseus istemcisi için `{ endpoint, token, expiresAt }` döndürür.

## Sunucu SDK’sı

`@playdrop/server` güvenilir platform çağrıları ekler: arkadaşlar ve oyun kartları (`playdrop.social`), satın alma doğrulaması (`playdrop.shop`), yapımcının ödediği yapay zeka üretimi (`playdrop.ai`) ve oda sesli sohbeti (`playdrop.multiplayer.forRoom`). Yalnızca yüklenmiş oyunlarda çalışırlar. Bkz. [sunucu SDK’sı başvurusu](https://www.playdrop.ai/tr/create/learn/server-sdk).

## Test et

Geliştirme sırasında Colyseus 0.17’yi ve MongoDB’yi yerelde çalıştır ve yerel istemcini yerel sunucuna bağla. Barındırılan sunucuyu test etmek için özel bir sürüm yükle ve `https://www.playdrop.ai/create/games/<slug>/test?v=<version>&player=1` adresini aç, sonra aynı bağlantıyı ikinci bir pencerede `player=2` ile aç. Her pencere senin ayrı bir test oyuncun olarak oynar. Çalıştığında test edilen sürümü `publish_game_version` ile yayınla.

Bağlantı kopmalarına göre tasarla: Colyseus’un yeniden bağlanma özelliği bir yeri kısa bir süre tutar ve odanın durumu geri dönen bir oyuncunun devam etmesine izin vermelidir.

## İlgili kılavuzlar

- [Çevrimiçi partiler ve sesli sohbet](https://www.playdrop.ai/tr/create/learn/online-party): Arkadaşlar oyununu çevrimiçi oynasın: parti boyutlarını bildir, parti penceresini aç, sdk.multiplayer.join ile ayrılmış odaya katıl, oda sesli sohbetini yönet.
- [Sunucu SDK’sı](https://www.playdrop.ai/tr/create/learn/server-sdk): Barındırılan oyun sunucuları: çalışma zamanı kuralları, doğrulanmış PlayDropPlayer, playdrop.social, playdrop.shop, playdrop.ai ve playdrop.multiplayer.
- [Paketleme ve .play](https://www.playdrop.ai/tr/create/learn/packaging): Kökünde catalogue.json olan derlenmiş bir klasör, ZIP ya da .play hazırla, oyun sayfası medyasını ve sunucuları bildir, prepare_catalogue_upload ile yükle.
