Setelah membaca Apakah UDP masih lebih baik dari TCP untuk game realtime yang berat data? , Saya bertanya-tanya apakah masuk akal untuk menggunakan TCP dan UDP secara bersamaan, tetapi untuk hal-hal yang berbeda:
TCP untuk mengirim informasi yang dikirim jarang, tetapi harus dijamin akan tiba dengan andal.
Seperti pembaruan skor, nama pemain, atau bahkan lampu nyala / mati di dunia game.UDP untuk mentransmisikan informasi yang diperbarui terus-menerus dan dapat hilang sesekali, karena informasi yang lebih baru selalu dalam perjalanan.
Seperti posisi, rotasi, dll.
Apakah ini ide yang masuk akal? Apa kemungkinan kelemahannya?
Apakah ada cara yang lebih baik untuk menangani ini?
networking
multiplayer
udp
gandalf3
sumber
sumber
Jawaban:
Ini mengakibatkan hilangnya paket untuk UDP karena pertikaian antara kedua protokol - ingat bahwa UDP tidak dijamin pengiriman, sedangkan TCP. Lebih banyak paket TCP akan melalui sementara UDP menderita - TCP menginduksi kehilangan paket UDP . Ada juga gagasan (historis) bahwa infrastruktur router lebih menyukai TCP daripada UDP, meskipun saya ragu itu masih benar pada tahap akhir ini.
Saya pikir Anda akan lebih baik menemukan salah satu protokol UDP berorientasi koneksi yang ada di luar sana untuk digunakan dalam gim dan sejenisnya, yang menawarkan Anda beberapa manfaat TCP tanpa ada kelemahannya. Ada beberapa seperti itu, biasanya dengan whitepaper merinci setiap konsep.
Contoh dari hal itu adalah perpustakaan Enet open source , fitur utamanya adalah pengiriman paket yang dapat diandalkan dan dapat dipesan secara opsional melalui UDP.
sumber
Berikut ini kutipan dari Sam Jansen dari komentar di gafferongames.com :
Makalah Karakteristik Paket UDP Rugi: Pengaruh Lalu Lintas TCP mendapatkan hasilnya dengan membuka beberapa koneksi TCP sekaligus dan membanjiri jaringan dengan data. Hal ini menyebabkan kemacetan yang diikuti oleh sinkronisasi global , yang keduanya menyebabkan paket terjatuh. Jelas, klien gim tidak akan membuka selusin koneksi sekaligus dan membanjiri jaringan dengan data, sehingga hasilnya Anda akan berbeda.
Untuk menjawab pertanyaan Anda:
Ya, ini adalah hal yang dapat diterima untuk dilakukan dengan asumsi Anda tetap dalam batas bandwidth Anda.
Saat menggunakan TCP dan UDP, Anda harus selalu memilih untuk mengirim sebanyak mungkin melalui UDP dan sesedikit mungkin melalui TCP.
Sekarang, saya bertanya kepada Anda: Apakah benar-benar perlu untuk mengirim skor, nama pemain, dan keadaan cahaya di atas TCP? Meskipun benar bahwa Anda perlu menerima data ini pada akhirnya, apakah benar bahwa Anda perlu menerima data ini secara ketat dan tepat sekali?
Mungkin tidak.
UDP berfungsi dengan baik untuk kasus-kasus ini, dan Quake 3 adalah contoh yang bagus tentang caranya.
Jadi, apa contoh yang baik dari TCP bersama UDP? Nah, pikirkan kotak obrolan game. Pembaruan untuk kotak obrolan ini (yaitu, baris teks baru) harus dikirim dengan baik dan benar-benar berurutan. Dengan demikian, TCP cocok.
sumber
Apakah ini ide yang masuk akal?
Apa kemungkinan kelemahannya?
Apakah ada cara yang lebih baik untuk menangani ini?
sumber
Ada batasan sumber daya tambahan untuk dipertimbangkan. Sebagian besar implementasi (Saya Percaya semua, tetapi tidak memiliki referensi) dari TCP pada server memiliki batasan pada berapa banyak Koneksi TCP bersamaan server dapat terbuka pada saat yang sama. Ini akan membatasi jumlah pemain yang dapat Anda buka secara bersamaan jika setiap pemain membutuhkan koneksi sendiri.
Batas ditentukan oleh pengaturan dalam sistem jaringan. Selain itu setiap Koneksi menggunakan memori yang harus datang dari suatu tempat di server.
Salah satu solusinya adalah dengan hanya membuka Koneksi TCP sementara sementara data ditransfer dan Tutup segera. Ini akan membuat transaksi lebih lambat, membuka Koneksi tcp adalah proses yang agak "mahal". Seperti biasa, ini semua tentang merancang sistem yang kuat dari awal untuk memungkinkan pertumbuhan besar.
sumber