Çoklu Sunucu (Multi-Realm) Gerçek Zamanlı PostgreSQL & WebSocket Mimarisi
Eş zamanlı binlerce savaş raporunun, canlı harita hareketlerinin ve çapraz platform senkronizasyonunun arkasındaki mühendislik çözümleri.
1. Dağıtık Veritabanı ve dbRouter Katmanı
Hükümdar, tek bir monolitik veritabanı yerine her oyun dünyasının (Sunucu 1: Ötüken, Sunucu 2: İsfahan vb.) bağımsız PostgreSQL instance'larında çalıştığı bir Multi-DB Router katmanı kullanır. Global kullanıcı kimlikleri ana DB'de doğrulanırken, harita koordinatları ve askeri hesaplamalar ilgili dünya DB'sinde tamamen izole biçimde işlenir.
2. Skia Canvas & 60 FPS Harita Çizimi
Hem iOS hem de Web tarayıcısında donanım hızlandırmalı grafik motoru olarak Shopify / React Native Skia kullanılmaktadır. Bu sayede 100x100 boyutundaki devasa haritalar DOM tıkanması yaşamadan saniyede 60 kare hızla akıcı biçimde kaydırılabilir ve yakınlaştırılabilir.
3. Mimari Oyuncuya Nasıl Yansır?
Çoklu sunucu tasarımının amacı yalnız daha fazla bağlantı kabul etmek değildir. Kimlik doğrulama katmanı oyuncunun hesabını ve erişebildiği dünyaları belirler; seçilen oyun sunucusu ise şehir, ordu, ittifak, pazar ve dünya haritası durumunu kendi veri sınırında işler. Böylece bir dünyadaki ekonomik hareketin başka bir dünyaya yanlışlıkla taşınmaması ve yoğun bir harita döngüsünün bütün oyuncuları aynı anda etkilememesi hedeflenir.
Web ve mobil istemciler aynı oyun sözleşmesini tüketir. `/play/` yeni bir oyun kopyası değil, mobil istemcinin web üretimidir; oyuncu aynı menüleri, şehir seçimini ve canlı dünya verisini görür. Landing sayfaları ise bu oturumlu uygulamadan ayrıdır ve yalnız kamuya açık rehber/kurumsal içerik sunar. Bu ayrım, AdSense'in editoryal sayfalarda kalmasını ve oyun içi mobil ödüllerin AdMob akışında yönetilmesini sağlar.
Operasyonel kabul sırasında servis sağlığı, yönlendirme, canonical adres, güvenlik başlıkları ve canlı oyun ekranı birlikte kontrol edilir. Sunucu sayısı tek başına kalite ölçütü değildir; asıl ölçüt, oyuncunun hangi istemciyi kullandığından bağımsız olarak aynı hesap ve oyun kurallarını tutarlı biçimde görmesidir.
Bir dünya geçici olarak yoğunlaştığında hata sınırının yalnız o dünyada kalması da bu ayrımın pratik değeridir. İzleme kayıtları bağlantı, sorgu ve oyun olayı katmanlarında ayrı tutulur; böylece gecikmenin istemciden mi, ağdan mı yoksa veri işleminden mi kaynaklandığı ölçülebilir.
4. Gerçek Zamanlı Senkronizasyon ve Sefer Çözümleme
Bir stratejinin gerçek zamanlı hissedilmesi için üç şeyin aynı anda çalışması gerekir: haritanın anlık durumunun tüm istemcilere yayılması, seferlerin sunucu saatine göre kesin bir anda çözümlenmesi ve iki istemcinin aynı olayı asla farklı sonuçla görmemesi. Hükümdar'da harita ve olay güncellemeleri WebSocket üzerinden itilir; savaş, üretim ve intikal gibi kritik hesaplar ise istemcide değil sunucuda yapılır. İstemci yalnızca sonucu gösterir. Bu, hile yüzeyini daraltır ve tarayıcı ile mobil arasında tutarlılığı garanti eder.
Sefer çözümlemesi zamana bağlı bir kuyruk olarak işler: her ordu, çıkış anında hesaplanan bir varış zaman damgası taşır ve o an geldiğinde savaş servisi tarafları, garnizonu, Sur bonusunu ve destek katkılarını tek bir işlemde değerlendirir. Bu yüzden "gönderim saati" değil "haritada görünen varış saati" ittifak koordinasyonunda tek doğru referanstır.
5. Neden Tek Kod Tabanı, İki Platform?
Web ve mobil istemciler aynı React Native + Skia kod tabanından türetilir. Bunun oyuncu için pratik sonucu, tarayıcıda açtığın hesaba mobilden aynı kullanıcı bilgileriyle girip kaldığın yerden devam edebilmendir; menüler, şehir seçimi ve canlı dünya verisi her iki platformda aynıdır. Landing sayfaları (bu blog dahil) ise bu oturumlu uygulamadan tamamen ayrıdır ve yalnız kamuya açık rehber/kurumsal içerik sunar. Bu ayrım, web reklamlarının editoryal sayfalarda kalmasını ve oyun içi mobil ödüllü reklamların ayrı bir ürün akışında yönetilmesini sağlar.
Operasyonel kabul sırasında servis sağlığı, yönlendirme, canonical adres, güvenlik başlıkları ve canlı oyun ekranı birlikte kontrol edilir. Sunucu sayısı tek başına bir kalite ölçütü değildir; asıl ölçüt, oyuncunun hangi istemciyi kullandığından bağımsız olarak aynı hesabı ve aynı oyun kurallarını tutarlı biçimde görmesidir.