Ben netcode bir oyun motoru "içine" olabilir farklı yolları değerlendirmek ilgileniyorum. Şimdi çok oyunculu bir oyun tasarlıyorum ve şimdiye kadar (en azından) ağ soketlerini işlemek için, grafik döngüsünü ve komut dosyalarını işleyen motorun geri kalanından farklı olarak ayrı bir iş parçacığına ihtiyacım olduğunu belirledim.
Ağa bağlı bir oyunu tamamen tek iş parçacıklı hale getirmenin potansiyel bir yolu vardı, bu da her kareyi oluşturduktan sonra ağları kontrol etmeyi engellemeyen soketler kullanarak kontrol ettirmek. Ancak, ağ gecikmesine bir çerçeve oluşturmak için gereken süre eklendiğinden, bu açık bir şekilde uygun değildir: Ağ üzerinden gelen iletilerin, geçerli çerçeve oluşturma (ve oyun mantığı) tamamlanana kadar beklemesi gerekir. Ancak, en azından bu şekilde oyun, az ya da çok, pürüzsüz olmaya devam edecekti.
Ağ için ayrı bir iş parçacığına sahip olmak, oyunun ağa tamamen yanıt vermesini sağlar, örneğin sunucudan bir durum güncellemesi alındıktan sonra bir ACK paketini anında geri gönderebilir. Ancak oyun kodu ile ağ kodu arasındaki iletişimin en iyi yolu hakkında biraz kafam karıştı. Ağ iş parçacığı, alınan paketi bir kuyruğa zorlar ve oyun iş parçacığı döngü sırasında uygun zamanda kuyruktan okur, bu nedenle bu bire bir kare gecikmeden kurtulduk.
Ayrıca, paketlerin gönderilmesini işleyen ipliğin borudan gelen paketleri kontrol edenlerden ayrı olmasını isterim, çünkü ortasındayken bir tane gönderemezdi Gelen mesaj olup olmadığını kontrol etme. Ben onun select
benzerliğini veya işlevini düşünüyorum .
Sanırım sorum şu, oyunu en iyi ağ yanıt hızı için tasarlamanın en iyi yolu nedir? Açıkça istemci sunucuya mümkün olan en kısa sürede kullanıcı girişi göndermelidir, bu yüzden her iki oyun döngüsünün içinde de olay işleme döngüsünden hemen sonra net gönderme kodunu alabilirim. Bu bir anlam ifade ediyor mu?