Ağ kodu tuzakları: Sessizce kaybolan mesajlar
Çok oyunculu oyun hataları başlı başına bir tür: hiçbir şey çökmez, hiçbir hata kaydı yazılmaz; sadece hiçbir şey olmaz. Kendi ağ kodumuzdan en sevdiğimiz iki tuzak, hem uyarı hem eğlence olarak.
Tuzak 1: kaydedilmemiş mesaj. Ağ protokolümüz mesaj sınıflarını bilir: “blok değişti”, “oyuncu hareket etti”, “sohbet”. Her yeni mesaj türü kodlayıcıya kaydedilmeli ki bir kimlik alsın ve serileştirilebilsin. Bunu unutursan olabilecek en kötü şey olur: gönderme çağrısı başarısız olur, ama hata sessizce yutulan bir yerde. Çökme yok, kayıt yok; özellik “sadece çalışmıyor”. Bunun peşinde defalarca hata ayıkladık, sonunda refleks oldu: yeni mesaj sınıfı mı? İlk soru: kaydedildi mi?
Tuzak 2: hayalet blok. Sunucu bir bloğu değiştirdiğinde, örneğin bir betik araziyi yeniden şekillendirdiği için, bağlı tüm oyunculara bunu aktif olarak söylemesi gerekir. Yayını unutursan hayalet blok çıkar: sunucu orada bir blok olduğunu bilir, istemci hava gösterir. Oyuncu görünmez bir duvara çarpar; daha kötüsü, sunucu tarafında artık var olmayan bir yere inşa eder. İki dünyayı yeniden hizalayan tek şey parçayı yeniden yüklemektir.
Ortak payda: çok oyunculu oyunda hep iki gerçek vardır, sunucununki ve istemcinin; ikisini senkron tutması gereken her yer potansiyel bir tuzaktır. Bizim yanıtımız tam olarak bu senkronizasyonu kontrol eden testler ve yeni mesajlar için kontrol listeleri oldu. Gösterişsiz ama hayaletler o zamandan beri nadir görülüyor.
Yorumlar