ERGGalata
← Devlog
Sunucu

Sunucu ağır yük altında

Yavaş bağlanan tek bir oyuncu bütün bölgeyi durdurabiliyordu. Altı ayrı sağlamlaştırma yapıldı.

Sınırda titreme

Bir oyuncu görüş mesafesinin tam sınırında durduğunda listeye girip çıkıyordu. Her giriş çıkış diğer oyunculara “biri geldi / biri gitti” mesajı gönderiyor; karakter gözlerinin önünde yanıp sönüyordu.

Çözüm iki eşik: altmış metrede listeye girer, altmış altı metrede çıkar. Aradaki altı metre titremeyi yutuyor.

Yavaş oyuncu herkesi durduruyordu

Sunucu saniyede otuz kez dünyanın durumunu hesaplayıp herkese gönderiyor. Bağlantısı yavaş bir oyuncu mesajları alamayınca gönderim kuyruğu şişiyor ve bütün bölgenin hesabı bekliyordu.

Artık her oyuncunun kendi kuyruğu var ve sınırlı. Kuyruk taşarsa o oyuncunun eski mesajları düşer; bölge beklemez. Yavaş bağlantının bedelini yalnız o bağlantı öder.

Vuruş nerede oldu

Bir saldırının isabet edip etmediğine sunucu karar verir. Ama oyuncu ekranında gördüğü an ile sunucudaki an arasında gecikme kadar fark var.

Savaş alanlarında bunun çözümü vardı: sunucu, saldırı anına geri sarıp hedefin o andaki yerine bakıyordu. Aynı yöntem açık dünyaya ve düşmanlara da taşındı.

Gecikme ölçümü

Sunucu ile oyuncu arasına saat vuruşu kondu. Gidiş dönüş süresi artık ölçülüyor — “oyuncu takılıyor” şikâyeti geldiğinde tahmin edilmeyecek.

Giriş donması

Şifre doğrulama işlemi kasıtlı olarak yavaştır; parola kırmayı zorlaştırır. Ama bu hesap ana iş parçacığında yapılıyordu: biri giriş yaparken sunucu duruyordu.

Hesap ayrı bir iş parçacığına alındı.

Testler

275 testin 275’i geçiyor. Bunlardan biri kod hatası sanılıyordu; incelendiğinde testin kendisi eskimişti — oyuncuların birbirini görüp görmediğini ölçen test, araya giren düşman trafiğini hesaba katmıyordu.

Sunucu tarafı hazır ve bekliyor. Eksik olan istemci tarafı: oyun henüz sunucuya bağlanmıyor.