UDP hakkında bir sorum var. Bağlam için gerçek zamanlı bir aksiyon oyunu üzerinde çalışıyorum.
UDP ve TCP arasındaki farkları biraz okudum ve onları oldukça iyi anladığımı hissediyorum, ancak hiç doğru hissetmeyen tek bir parça var ve bu güvenilirlik ve özellikle teşekkür ediyor . UDP'nin varsayılan olarak güvenilirlik sağlamadığını anlıyorum (yani paketler atılabilir veya sipariş dışı olabilir). Bazı güvenilirlik gerektiğinde, gördüğüm çözüm (kavramsal olarak mantıklıdır) onayları kullanmaktır (yani sunucu istemciye bir paket gönderir ve istemci bu mesajı aldığında, sunucuya bir onay gönderir) .
Kabul iptal edildiğinde ne olur?
Yukarıdaki örnekte (bir istemciye bir paket gönderen bir sunucu), sunucu bu paketler için onaylar alınana kadar paketleri her kareyi yeniden göndererek potansiyel paket kaybını ele alır. Hala bant genişliği veya bozuk mesajlarla karşılaşabilirsiniz, ancak yalnızca paket kaybı açısından sunucu kapsanır.
Ancak, istemci hiçbir zaman ulaşmayacak bir bildirim gönderirse, sunucunun bu mesajı göndermeyi durdurmaktan başka seçeneği kalmazdı, bu pakette bulunan bilgiler gerekirse oyunu bozabilir. Sunucuya benzer bir yaklaşım uygulayabilirsiniz (yani, ack için bir ack alana kadar onay göndermeye devam edebilir misiniz?), Ancak bu yaklaşım sonsuza kadar geri dönmenizi sağlayacaktır (ack için ack için bir ack'e ihtiyacınız olacağı için) ve bunun gibi).
Temel mantığımın burada doğru olduğunu hissediyorum, bu da beni iki seçenekle bırakıyor.
- Tek bir onay paketi gönderin ve en iyisini umun.
- Bir avuç onay paketi gönderin (belki 3-4) ve hepsinin düşürülmeyeceğini varsayarak en iyisini umun.
Bu sorunun bir cevabı var mı? Temelde bir şeyi yanlış mı anlıyorum? Farkında olmadığım UDP kullanma garantisi var mı? Mantıkımın sağlam olduğundan rahat olana kadar çok fazla ağ kodu ile ilerlemekte tereddüt hissediyorum.