İşte Sam Jansen'in gafferongames.com'a yaptığı bir yorumdan alıntı :
Bir oyun geliştiricisi olarak değil, bir ağ araştırmacısı olarak konuşurken, asla TCP ve UDP'yi birlikte kullanmamanın sonucu biraz güçlü görünüyor. TCP yalnızca çok fazla veri gönderiyorsa paket kaybı yaşayacaktır; bazı yollarla tıpkı gönderdiğiniz UDP verileri gibi. Aradaki fark, TCP'nin gönderme hızı üzerinde doğrudan kontrolünüz olmamasıdır, bu size gizlidir.
Sadece bazı güvenilir veriler göndermeniz gerekiyorsa ve yeniden iletim ve güvenilir bir protokol uygulamak konusunda endişelenmek istemiyorsanız ve oranın düşük olacağını biliyorsanız, hem TCP hem de UDP'yi kullanmayla ilgili herhangi bir sorun olmayacaktır.
İkisi arasındaki ilişki gerçekten bu kadar karmaşık değildir: TCP, paket kaybı elde edene kadar gönderme hızını (gönderilecek veri varsa) arttırır, bu durumda oranını geri çevirir, ardından oranı tekrar artırmaya başlar (bu zaman daha yavaş). Orandaki artış paket kaybına neden olduğunda, UDP paketleriniz de dahil olmak üzere başka veri akışlarına da girmesi muhtemeldir.
UDP Paket Kaybının Kağıt Özellikleri: TCP Trafiğinin Etkisi , bir kerede birden fazla TCP bağlantısı açarak ve ağı verilerle doldurarak sonuçlarını aldı. Bu, tıkanıklığa ve ardından küresel senkronizasyona yol açar , her ikisi de paketlerin düşmesine neden olur. Açıkçası, bir oyun istemcisi aynı anda bir düzine bağlantı açmayacak ve ağa veri aktaracak ve böylece sonuçlarınız farklı olacaktır.
Soruna cevap vermek için:
Aynı anda hem TCP hem de UDP kullanmak mantıklı olup olmadığını merak ediyorum, ama farklı şeyler için [...]
Evet, bu, bant genişliği sınırlarınız dahilinde kaldığınızı varsayarak kabul edilebilir bir şeydir.
- Nadiren gönderilen ancak güvenilir bir şekilde ulaşması garanti edilen bilgileri göndermek için TCP. Skor güncellemeleri, oyuncunun adı ve hatta oyun dünyasındaki bir ışığın açık / kapalı durumu gibi.
Hem TCP hem de UDP kullanırken, her zaman UDP üzerinden mümkün olduğunca ve TCP üzerinden mümkün olduğunca az göndermeyi tercih etmelisiniz.
Şimdi size şunu soruyorum: Skoru, oyuncunun adını ve TCP üzerinden bir ışığın durumunu göndermek gerçekten gerekli mi? Bu verileri eninde sonunda almanız gerektiği doğru olsa da, bu verileri kesinlikle sırayla ve tam olarak bir kez almanız gerektiği doğru mu?
Muhtemelen değil.
UDP bu vakalar için iyi çalışıyor ve Quake 3 bunun nasıl bir örneğidir.
Peki UDP'nin yanında iyi bir TCP örneği nedir? Bir oyunun sohbet kutusunu düşünün. Bu sohbet kutusundaki güncellemelerin (yani yeni metin satırlarının) hem güvenilir hem de sırayla gönderilmesi gerekir. Bu nedenle, TCP iyi bir seçimdir.