Okey & 101 Multiplayer Oyun Motoru: .NET 9 SignalR Backend
Unity tabanlı bir Okey/101 oyunu için ticari bir sözleşme kapsamında geliştirilmiş; otoriter sunucu (authoritative server) mimarisine sahip, gerçek zamanlı ve yüksek eşzamanlılıklı (highly concurrent) çok oyunculu oyun motoru.
Teknoloji yığını
- Çatılar & kütüphaneler
Performans & metrikler
- Yüksek frekanslı oyun içi aksiyonlar (taş çekme/atma) sırasında veritabanına gitmek yerine
ConcurrentDictionaryüzerinden in-memory durum çözümü - Read-only (sadece okuma) yapılan EF Core sorgularında
AsNoTracking()kullanılarak Change Tracker maliyetinin (memory allocation) sıfırlanması - Nginx Reverse Proxy arkasında çalışacak şekilde yapılandırılmış, X-Forwarded-For header'ları ile IP güvenliği sağlanan optimize edilmiş Kestrel sunucusu
Neden geliştirdim?
Ticari bir freelance proje olarak geliştirilen bu sistemin amacı, geleneksel HTTP protokollerinin yetersiz kaldığı sıra tabanlı çok oyunculu masa oyunları (Okey, 101, Çanak) için düşük gecikmeli bir altyapı sağlamaktı. İstemci (Unity) manipülasyonlarını engellemek adına oyun kurallarının, taş dağıtımının ve kazanma validasyonlarının tamamen sunucu tarafında (authoritative) işletildiği, spagetti koda dönüşmeyecek modüler bir oyun motoruna ihtiyaç vardı.
Mimari & kararlar
Sistem .NET 9.0 üzerinde koşar ve gerçek zamanlı çift yönlü iletişim için SignalR Hub'larını (SocialHub, TableHub) kullanır. Aktif oyun durumları (GameMatchState), veritabanı darboğazlarını (I/O bottlenecks) önlemek adına RAM üzerinde ConcurrentDictionary kullanılarak thread-safe bir şekilde yönetilir. Farklı oyun modları (Klasik, 101, Çanaklı vb.), IGameRuleHandler arayüzü üzerinden Strateji Deseni (Strategy Pattern) ile izole edilmiştir. Veri kalıcılığı (envanter, işlem defterleri, mesajlar) PostgreSQL ve Entity Framework Core aracılığıyla sağlanırken, liderlik tabloları gibi ağır aggregate işlemleri ana thread'i bloklamamak için PeriodicTimer tabanlı BackgroundService worker'larına devredilmiştir.
Temel özellikler
- 01Ticari kullanıma hazır; envanter, XP, seviye atlama ve defter (transaction ledger) takibi sunan Progression/Ekonomi sistemi
- 02SignalR Group API'si ile izole edilmiş masa (Table) ve klan/özel mesajlaşma odaları
- 03Farklı oyun modlarını (Okey 101, Klasik, Teke Tek) DI (Dependency Injection) üzerinden runtime'da enjekte eden Strateji Deseni implementasyonu
- 04WebRTC tabanlı sesli sohbet için sunucu taraflı sinyalleşme (signaling) rölesi
- 05Periyodik olarak hesaplanan ve önbelleğe alınan (MemoryCache) günlük, haftalık ve aylık liderlik tabloları
Teknik değerlendirme
Ticari bir ürün olarak teslim edilen bu mimarinin en kritik mühendislik kararı, State Management (Durum Yönetimi) ile Persistence (Kalıcılık) katmanlarının ayrılmasıdır. Oyun oynanırken taş dizilimleri ve sıra takibi bellekte milisaniyeler içinde çözülür. Oyun bittiğinde (ClaimWin), ACID uyumluluğunu garanti etmek için db.Database.BeginTransactionAsync() kullanılarak ödül, XP ve çanak dağıtımı tek bir transaction bloğunda veritabanına (PostgreSQL) yansıtılır. Bu sayede hem sunucu maliyetleri minimize edilir hem de olası crash durumlarında oyuncu bakiyelerinde tutarsızlık yaşanması donanımsal düzeyde engellenir.