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.
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.
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:
{ "server": { "entry": "server/index.mjs", "rooms": ["game"] } }Onu bir paket 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 (
colyseus0.17.10,@colyseus/schema4.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,mongodbve@playdrop/serveriç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
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. 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.
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.