Geliştirici Notları: Bilgi Yarışması
Giriş ve Mimari Yaklaşım
Paira Bilgi Yarışması, tamamen tarayıcı tabanlı çalışan, verileri depolamak için merkezi bir veritabanı (Database) veya aracı oyun sunucusu barındırmayan, P2P (Peer-to-Peer) bağlantı mimarisine dayalı çok oyunculu bir genel kültür ve trivia oyunudur. Oyun, arkadaş gruplarının herhangi bir indirme veya kayıt işlemi yapmadan, doğrudan web tarayıcıları üzerinden sıfır gecikme ile yarışabilmesini sağlamak amacıyla geliştirilmiştir.
Tüm oyun durumu (state) yönetimi, sunucusuz mimarinin getirdiği sınırlamaları aşmak ve pürüzsüz bir oyun akışı sunmak adına tarayıcı düzeyinde koordine edilen Host-Client yapısıyla yönetilmektedir.
P2P Ağ Topolojisi ve Oda Keşfi
Geleneksel istemci-sunucu yapısı yerine, oyunda WebRTC (Web Real-Time Communication) protokolü üzerinde yükselen bir Host-Client (Kurucu-Katılımcı) ağ topolojisi kullanılır:
- Host (Kurucu Node): Oyunu başlatan kullanıcı yerel tarayıcısında sunucu (Host) rolünü üstlenir. Soru havuzunun yönetiminden, sürelerin başlatılmasından, cevapların toplanmasından ve anlık liderlik sıralamasının dağıtılmasından sorumludur.
- Clients (Katılımcı Peer'lar): 6 haneli oda kodunu girerek odaya bağlanan oyuncular, doğrudan Host ile peer-to-peer
RTCDataChannelbağlantısı kurarlar. Katılımcıların kendi aralarında doğrudan veri kanalı açmasına gerek kalmaz; tüm bilgi akışı Host üzerinden senkronize edilir. - Sinyalleşme (Signaling): Oyuncuların birbirlerini internet üzerinde bulup IP ve port bilgilerini (ICE Adayları) değiş tokuş edebilmesi için bir WebRTC aracı sinyalleşme sunucusu (PeerJS) kullanılır. Bağlantı kurulduktan sonra bu aracı sunucu tamamen devre dışı kalır ve veri akışı doğrudan cihazlar arasında akar.
Gerçek Zamanlı Veri Senkronizasyonu (Data Synchronization)
Bilgi Yarışması'nda oyun akışının sorunsuz ilerlemesi için birçok kritik veri paketinin milisaniye düzeyinde senkronize edilmesi gerekir. Bu süreç, RTCDataChannel üzerinden iletilen şu paket tipleriyle koordine edilir:
- Soru ve Şıkların Dağıtılması: Host, soru havuzundan seçilen güncel soruyu, cevap şıklarını ve sorunun aktif süresini tüm istemcilere eş zamanlı olarak gönderir.
- Hız Bazlı Puanlama ve Cevap Toplama: İstemciler bir şıkkı işaretlediğinde, cevap bilgisi ve tıklama zaman damgası Host'a gönderilir. Host, sorunun başlangıç zamanı ile cevabın geldiği zaman arasındaki farkı hesaplayarak hız bazlı puanlama yapar (soruya daha hızlı doğru cevap veren oyuncu daha yüksek puan alır).
- Zamanlayıcı Senkronizasyonu: Her sorunun kalan süresi, Host tarafından başlatılan bir geri sayım ile yönetilir. Ağ gecikmelerinden kaynaklanabilecek kaymaları önlemek için istemcilerdeki zamanlayıcılar Host'tan gelen zaman paketleriyle sürekli güncellenir.
- Liderlik Sıralaması: Her sorunun tamamlanmasının ardından veya anlık olarak Host, güncel puan durumunu ve liderlik tablosunu hesaplayarak tüm katılımcılara yayınlar (broadcast).
Oda Mantığı ve Oturum Yönetimi
Oyun odaları, PeerJS altyapısı tarafından atanan 6 karakterli benzersiz bir Oda Kodu (Peer ID) ile yönetilir:
- Bağlantı Kurulumu: Katılımcı oda kodunu girdiğinde SDP (Session Description Protocol) ve ICE Candidate alışverişi başlar ve güvenli bir veri kanalı açılır.
- Soru Havuzu Yönetimi: Host, oyun ayarlarında seçilen soru paketlerini (
tr.jsondosyasındaki kategorilere göre) belleğe yükler. Oyun sırasında soruların sırası ve kategorileri Host tarafından kontrol edilir ve dağıtılır. - Hata Toleransı (Resilience): Bağlantı kesintileri veya bir oyuncunun oyundan düşmesi durumunda, Host'un
handlePlayerLeavemekanizması tetiklenir. İlgili oyuncunun puanları saklı tutulur veya oyun akışının tıkanmaması için aktif tur güncellenir.
E-E-A-T & Güvenlik
Uygulama tamamen istemci tarafında (Client-Side) çalıştığı için kullanıcıların kişisel verileri, IP adresleri veya oyun içi yazışmaları herhangi bir uzak sunucuda veya veritabanında depolanmaz. Tüm veri transferleri WebRTC'nin doğası gereği uçtan uca şifreli (End-to-End Encrypted - DTLS/SRTP) kanallar üzerinden doğrudan cihazlar arasında gerçekleşir. Bu yaklaşım hem maksimum hız ve sıfır sunucu maliyeti sağlar, hem de veri gizliliğini en üst düzeyde korur.
Bu teknik dokümantasyon, tarayıcı tabanlı eş zamanlı oyun geliştirme meraklıları ve platformun altyapısını merak eden geliştiriciler için Ahmet Efe Yaşar tarafından hazırlanmıştır.