Saya tertarik untuk mengevaluasi berbagai cara yang berbeda bahwa netcode dapat "menghubungkan ke" mesin gim. Saya sedang mendesain permainan multipemain sekarang, dan sejauh ini saya telah menentukan bahwa saya perlu (paling tidak) memiliki utas terpisah untuk menangani soket jaringan, berbeda dari sisa mesin yang menangani loop grafis dan skrip.
Saya memang memiliki satu cara potensial untuk membuat game jaringan sepenuhnya single-threaded, yaitu memeriksanya setelah merender setiap frame, menggunakan soket non-blocking. Namun ini jelas tidak optimal karena waktu yang diperlukan untuk membuat bingkai ditambahkan ke jeda jaringan: Pesan yang tiba melalui jaringan harus menunggu sampai bingkai saat ini membuat (dan logika game) selesai. Tapi, setidaknya dengan cara ini gameplaynya akan tetap lancar, kurang lebih.
Memiliki utas terpisah untuk jaringan memungkinkan game menjadi sepenuhnya responsif terhadap jaringan, misalnya ia dapat mengirim kembali paket ACK secara instan setelah menerima pembaruan status dari server. Tapi saya agak bingung tentang cara terbaik untuk berkomunikasi antara kode permainan dan kode jaringan. Utas jaringan akan mendorong paket yang diterima ke antrian, dan utas permainan akan membaca dari antrian pada waktu yang tepat selama perulangannya, jadi kami belum menyingkirkan keterlambatan bingkai hingga satu ini.
Juga, sepertinya saya ingin utas yang menangani pengiriman paket terpisah dari yang memeriksa paket yang turun, karena tidak akan dapat mengirim satu saat berada di tengah-tengah memeriksa apakah ada pesan masuk. Saya berpikir tentang fungsi select
atau sejenisnya.
Saya kira pertanyaan saya adalah, apa cara terbaik untuk mendesain game untuk respon jaringan yang terbaik? Jelas klien harus mengirim input pengguna sesegera mungkin ke server, jadi saya bisa meminta kode net-send segera setelah loop pemrosesan acara, keduanya di dalam loop game. Apakah ini masuk akal?