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.
Benzer projeler
The Burglar's Quest
Her oturumda benzersiz harita dizilimleri sunan, prosedürel (procedural) üretim motoruna sahip Unity tabanlı bir gizlilik ve simülasyon oyunu.
- C#
- Unity
TSSB VR Simülasyonu
Travma Sonrası Stres Bozukluğu (TSSB) farkındalığı için tasarlanmış; dallanan (branching) psikolojik senaryolar ve Firebase telemetrisi içeren bir sanal gerçeklik (VR) simülasyonu.
- C#
- Unity
- Firebase
- +1
MangaSokağı: Tip-Güvenli NestJS & Prisma Backend Mimarisi
MangaSokağı e-ticaret platformunun çekirdek işlem motoru olarak görev yapan, bağımlılık enjeksiyonu (DI) ve uçtan uca tip güvenliği (end-to-end type safety) üzerine inşa edilmiş modüler NestJS REST API'si.
- TypeScript
- SQL
- NestJS
- +6
Benzer bir ihtiyacınız mı var?
Bu tür bir sistemi sizin için de kurabilirim.
Projenizi birkaç cümleyle anlatın; doğru yaklaşımı ve tahmini kapsamı birlikte belirleyelim.