Tidak, UDP masih lebih unggul dalam hal latensi kinerja , dan akan selalu lebih cepat, karena filosofi dari 2 protokol - dengan asumsi data komunikasi Anda dirancang dengan UDP atau komunikasi lainnya yang merugi.
TCP membuat abstraksi di mana semua paket jaringan tiba, dan mereka tiba dalam urutan yang tepat di mana mereka dikirim. Untuk mengimplementasikan abstraksi pada saluran lossy, ia harus menerapkan transmisi ulang dan waktu habis, yang menghabiskan waktu. Jika Anda mengirim 2 pembaruan pada TCP, dan paket pembaruan pertama hilang, Anda tidak akan melihat pembaruan kedua hingga:
- Hilangnya pembaruan pertama terdeteksi.
- Diperlukan pengiriman ulang pembaruan pertama.
- pengiriman ulang telah tiba dan telah diproses.
Tidak masalah seberapa cepat ini dilakukan dalam TCP, karena dengan UDP Anda cukup membuang pembaruan pertama dan gunakan yang kedua, yang lebih baru, sekarang. Tidak seperti TCP, UDP tidak menjamin bahwa semua paket tiba dan itu tidak menjamin bahwa mereka tiba secara berurutan.
Ini mengharuskan Anda untuk mengirim jenis data yang tepat, dan merancang komunikasi Anda sedemikian rupa sehingga kehilangan data dapat diterima.
Jika Anda memiliki data di mana setiap paket harus tiba, dan paket-paket itu harus diproses oleh gim Anda sesuai urutan pengirimannya, maka UDP tidak akan lebih cepat. Sebenarnya menggunakan UDP dalam hal ini kemungkinan akan lebih lambat karena Anda merekonstruksi TCP dan mengimplementasikannya dengan menggunakan UDP dalam hal ini Anda mungkin juga menggunakan TCP.
EDIT - Menambahkan beberapa informasi tambahan untuk memasukkan / mengatasi beberapa komentar:
Biasanya, tingkat kehilangan paket pada Ethernet sangat rendah, tetapi menjadi jauh lebih tinggi begitu WiFi terlibat atau jika pengguna memiliki unggahan / unduhan yang sedang berlangsung. Mari kita asumsikan kita memiliki paket loss yang seragam sempurna sebesar 0,01% (satu arah, bukan pulang pergi). Pada penembak orang pertama, klien harus mengirim pembaruan setiap kali terjadi sesuatu, seperti ketika kursor mouse memutar pemain, yang terjadi sekitar 20 kali per detik. Mereka juga dapat mengirim pembaruan per frame atau pada interval tetap, yang akan menjadi 60-120 pembaruan per detik. Karena pembaruan ini dikirim pada waktu yang berbeda, mereka akan / harus dikirim dalam satu paket per pembaruan. Pada permainan 16 pemain, semua 16 pemain mengirim 20-120 paket per detik ini ke server, menghasilkan total 320-1920 paket per detik. Dengan tingkat kehilangan paket sebesar 0,01%, kami memperkirakan akan kehilangan satu paket setiap 5,2-31,25 detik.
Pada setiap paket yang kami terima setelah paket yang hilang, kami akan mengirim DupAck, dan setelah DupAck ke-3 pengirim akan mengirim ulang paket yang hilang . Jadi waktu yang diperlukan TCP untuk memulai pengiriman ulang adalah 3 paket, ditambah waktu yang diperlukan untuk DupAck terakhir untuk sampai di pengirim. Maka kita perlu menunggu pengiriman ulang tiba, jadi secara total kita menunggu 3 paket + 1 latensi pulang pergi. Latensi pulang-pergi biasanya 0-1 ms di jaringan lokal dan 50-200 ms di internet. 3 paket biasanya akan tiba dalam 25 ms jika kami mengirim 120 paket per detik, dan dalam 150 ms jika kami mengirim 20 paket per detik.
Sebaliknya, dengan UDP kami pulih dari paket yang hilang segera setelah kami mendapatkan paket berikutnya, jadi kami kehilangan 8,3 ms jika kami mengirim 120 paket per detik, dan 50 ms jika kami mengirim 20 paket per detik.
Dengan hal-hal TCP menjadi berantakan jika kita juga perlu mempertimbangkan Nagle (jika pengembang lupa untuk mematikan mengirim penggabungan, atau tidak dapat menonaktifkan ACK yang tertunda ), penghindaran kemacetan jaringan , atau jika kehilangan paket cukup buruk sehingga kita harus memperhitungkan beberapa packet loss (termasuk kehilangan Ack dan DupAck). Dengan UDP kita dapat dengan mudah menulis kode lebih cepat karena kita tidak peduli menjadi warga jaringan yang baik seperti TCP.