ERGGalata
← Devlog
Sunucu

Sunucu canlıya çıktı

Aylardır testleri geçen sunucu bir kutuya kuruldu ve dışarı açıldı. İki oyuncu ilk kez aynı şehirde buluştu. Canlıda görünen açıklar ayrı bir liste oldu.

Canlı

Sunucu aylardır yazılıydı ve testleri geçiyordu. Ama tek bir yerde koşuyordu: geliştirme makinesinde.

O gün bir kutuya kuruldu ve dışarıya açıldı. İki istemci bağlandı ve ilk kez aynı şehirde buluştu.

Yanında bir bekçi servisi kuruldu: süreç ölürse geri kaldırıyor. Bir sağlık ucu eklendi: tick süresi, saniyedeki veri ve gecikme dışarıdan okunabiliyor.

On adımlık denetim

Canlıya çıkmadan önce mimari bir denetim yapıldı. On başlık, sırayla kapatıldı.

Çıkanların bir kısmı sıradan sertleştirmeydi: ters vekil arkasında gerçek IP okuma, IP başına bağlantı sınırı, ayrı bir alfa bölgesi.

Bir kısmı ise gerçek açıktı. Yeteneklerin ve auraların kimlikleri serbest metindi; artık sabit kimliklerle çalışıyorlar ve bir oyuncu yalnız kendi kitindeki yeteneği kullanabiliyor. Daha önce bu kontrol istemciye bırakılmıştı.

Oyuncu canı, ölüm, yeniden doğuş ve can yenilenmesi bu turda yazıldı. Sayılar yer tutucu; dengeleme ayrı bir iş. Çerçeve artık sunucuda.

Kayıtlar ham JSONL olarak yazılmaya başlandı. Toplama ve görselleştirme yok; ham veri var. Önce veriyi biriktirmek, sonra ne sorulacağına karar vermek daha ucuz.

Motorun hız tavanı

Sunucu her oyuncu için bir hız tavanı uyguluyor; hile koruması bu. Tavan 21 m/s idi.

Motor fiziği ise 150 km/h’e çıkabiliyordu. Sonuç: motorla giden oyuncu her üç metrede bir sunucu tarafından geri çekiliyordu. Ekranda sürekli bir geri sıçrama.

Tavan 63 m/s’ye çıkarıldı. Bir sonraki commit’te fark edildi ki ilk değişiklik yalnız testi güncellemişti, asıl kodu değil. Test yeşildi ve yanlıştı.

Ayrıca binek artık sunucunun bildiği bir durum: binme ve inme birer niyet olarak gidiyor, sunucu hız tavanını ona göre açıyor.

Doğuş noktası

Alfa’nın doğuş noktası bir binanın içine düşüyordu.

Nokta taşındı ve aynı kayma NPC’lere, kuklalara ve düğüm noktalarına da uygulandı. Yoksa dünya kendi içinde tutarsız kalırdı.

Doğuşun önüne dört kukla NPC kondu: saldırmıyorlar, 100 bin canları var, öldükten beş saniye sonra geri geliyorlar. Yetenek denemek için bir hedef gerekiyordu.

Ağ hatalarını pencere açmadan ölçmek

Uzaktaki oyuncular titriyordu ve motorlar yerinde çakılıyordu.

Bu tür hataları gözle kovalamak yavaş: oyunu aç, iki istemci bağla, bak, tahmin et. Onun yerine penceresiz koşan bir ölçüm düzeneği kuruldu: otopilotlu istemciler ve bir bot, hepsi ekransız.

Titreme kök nedeni ölçüldü: konum ipuçları seyrek geliyordu ve her ipucunda karakter sıçrıyordu. Çözüm ipucunu anında uygulamak yerine aradaki farkı yumuşatarak kapatmak oldu.

Motorun çivilenmesi ise bambaşka bir sebepten geliyordu: fizik işleme, düğüm sahneye eklenmeden önce kapatılıyordu ve ekleme sırasında geri açılıyordu.

Dışarıya paket

Günün sonunda dış oyuncular için bir paket yayınlandı.

Sonuç

Bir sunucunun “hazır” olması ile “ayakta” olması aynı şey değil. Aradaki fark 275 testin yakalamadığı şeylerde: ters vekil arkasındaki IP, bağlantı hızı sınırı, binanın içine düşen doğuş noktası, testi güncelleyip kodu unutmak.

Hiçbiri zor problem değildi. Hiçbiri de canlıya çıkmadan görünmüyordu.