1 puan yazan GN⁺ 2024-11-24 | 1 yorum | WhatsApp'ta paylaş

Ağ modeli

  • Quake 3'ün ağ modeli, motorun en zarif bölümlerinden biridir; hızlı ortamlarda ilk iletimde ulaşmayan bilgiyi yeniden göndermenin değersiz olduğunu vurgular.
  • UDP/IP kullanır; TCP/IP'nin güvenilir aktarımı gecikmeye yol açtığı için kullanılmaz.
  • Ağ yığını, iki karşılıklı dışlayıcı katmanla genişletilir: önceden paylaşılan anahtar kullanan şifreleme ve önceden hesaplanmış Huffman anahtarları kullanan sıkıştırma.
  • Sunucu tarafında, UDP datagramlarının boyutunu en aza indirirken UDP'nin güvenilmezliğini telafi eden sistem öne çıkar.

Mimari

  • İstemci tarafı basittir; her karede sunucuya komut gönderir ve oyun durumu güncellemeleri alır.
  • Sunucu, ana oyun durumunu her istemciye yaymak zorundadır ve UDP paket kaybını hesaba katmalıdır.
  • Üç ana unsur vardır: ana oyun durumu, istemci komutlarının Netchannel üzerinden iletilmesi ve son 32 oyun durumunu dairesel bir dizide saklayan snapshot sistemi.

Snapshot sistemi

  • Sunucu, istemciye güncelleme gönderirken ana oyun durumunu her zaman istemcinin bir sonraki geçmiş yuvasına kopyalar ve bunu diğer snapshot'larla karşılaştırır.
  • Geçerli bir snapshot yoksa, tam güncelleme üretmek için "dummy snapshot" kullanılır.
  • İstemci önceki güncellemeyi aldığını onaylarsa yalnızca kısmi güncellemeler gönderilir.
  • Paket kaybı olduğunda da aynı süreç izlenir; daha önce ulaşmayan bilgilerle yeni bilgiler tek bir mesajda gönderilir.

Bellek dayanıklılığı ve C

  • Quake3, introspection olmadan snapshot'ları karşılaştırır; her alanın konumu diziler ve önişlemci yönergeleri aracılığıyla önceden yapılandırılmıştır.
  • netField_t yapısı, alanların konumunu ve boyutunu tanımlamak için kullanılır; farklar bu sayede ağ üzerinden iletilir.

Ön bölme

  • NetChannel modülü, mesajları 1400 baytlık parçalara bölerek gönderir; bu, yönlendiricilerin paketleri parçalamak zorunda kalmasını önler.
  • Yönlendirici parçalama, ağa girişte paketi engeller ve ağdan çıkışta tüm parçaların beklenmesini gerektirir; bu yüzden maliyetlidir.

Güvenilir ve güvenilir olmayan mesajlar

  • Snapshot sistemi, ağda kaybolan UDP datagramlarını telafi eder; ancak bazı mesaj ve komutların mutlaka teslim edilmesi gerekir.
  • Bu güvence, NetChannel üzerinden soyutlanır.

1 yorum

 
GN⁺ 2024-11-24
Hacker News görüşleri
  • Bu yazı çok ilgi çekici; önceki yazılar da öyleydi. Ama şu sıralar iş çok sıkıcı, bu yüzden hobi projelerine enerji kalmıyor.
  • "Isochronous" terimini ilk kez FireWire çıktığında duymuştum; UDP kullanımının gerekçelendirilmesinde bundan bahsediliyordu. Günümüzde USB/Thunderbolt spesifikasyonlarında önemli bir parça.
  • Serinin ilk yazısının bağlantısı: https://fabiensanglard.net/quake3/index.php
  • Gecikme tahmini ve düzeltme özelliği ilginç; karmaşık operational transform (OT) kullanılmıyor. Bu daha basit; paylaşılan durumun işbirlikçi düzenleme belgesi değil, bağımsız bir doğruluk kaynağına ihtiyacı var ve geliştirmesi daha hızlı, performansı da daha iyi.
  • Orijinal Q3A istemcisinin ağ kodu LAN'da iyi çalışıyordu ama uzaktan oyunda gecikmeye duyarlıydı. Quake Live'daki ilginç değişikliklerden biri, uzaktan oyun için güncellenmiş ağ koduydu. İnternet bağlantıları da zaman içinde genel olarak iyileşti.
  • Görünüşe göre site HN Hug of Death yaşıyor: <bağlantı zaman aşımına uğradı>
  • Cumartesi sabahı bir kupayı yavaş yavaş yudumlarken okumalık güzel bir yazı. Hayatın küçük keyiflerinden biri.
  • S: Gerçek zamanlı oyun protokollerine yönelik modern yaklaşımları öğrenmek için kaynak var mı?
  • Muhtemelen snapshot ID numarası da istemciye gönderilip doğrulanıyordur?
  • Hâlâ kurşun geçirmez açık kaynak middleware var mı?