Unity ile TCP sistemi düşük gecikme sağlar mı?

Aslına bakarsak bu sistemde yaptığım deneylerde JS WebSocket sistemine benzediğini tespit ettim. Server, her client için açık bağlantı bırakıyor. Bu şekilde çalışıyor.
Nasıl çalıştığını biliyorum sadece arkadaşın neye dayanarak bunları söylediğini merak ettim.
 
Websocket de dediğiniz gibi arkaplanda TCP kullanıyor. Ek maliyet olarak gönderilen mesajların JSON formatına çevrilip çözülmesi var. Bu biraz cpu yiyen bir işlem mobil için oyun geliştiriyorsanız göz önüne almanız gerebilir. TCP'de bu kısmı da kendiniz yapıyorsunuz. Json ile göndermektense kendi formatınızı bytearray olarak göndererek hem cpu maliyetini hem de hat kullanımını azaltabilirsiniz.

Lag sizin için çok önemliyse TCP yerine UDP kullanmayı da düşünebilirsiniz. TCP'de paketlerin sıralı gönderilmesi, kaybolan paketin tekrar gönderilmesi gibi konular laga sebep olabiliyor. Bu kontroller sizin için gereksizse ya da kendiniz yapmayı göze alabiliyorsanız UDP daha mantıklı olabilir.
 
Bu çok normal bir durum. Sık yaşanmıyor ama evet paketlerin bir kısmı kaybolabiliyor. TCP bunu kendi düzeltiyor. Düzeltmeye çalışırken de paketlerin sırası şaşmasın diye geçici olarak paket akışını durduruyor. Bu da anlık laga sebep olabiliyor.

UDP ile yaparsanız kaybolan paketler öylece kaybolup gidiyor :D ama paket akışı gecikme olmadan devam ediyor.

Örneğin saniyede 120 kere pozisyon paketi yolladınız 119'u başarılı olarak iletildi. UDP'de arada bir paket eksik gider. Sıralama da şaşabilir bunu kendiniz kontrol etmelisiniz. TCP'de ise hem paketlerin tamamının iletilmesi hem de sırası garanti ediliyor. Sıra şaşarsa ya da eksik paket olursa TCP tekrar iletilmesini ve düzeltilmesini istiyor. Bu uygulama geliştiriciler için kodlamayı kolaylaştırıyor ama tabi bu düzeltmeler yaparken gelen paketler uygulamaya iletilmediği için anlık laga sebep olabiliyor.
 

Technopat Haberler

Geri
Yukarı