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
Hacker News görüşleri