ฉันสนใจที่จะประเมินวิธีต่างๆที่ netcode สามารถ "เชื่อมต่อ" เอ็นจิ้นเกม ตอนนี้ฉันกำลังออกแบบเกมที่มีผู้เล่นหลายคนและจนถึงตอนนี้ฉันได้ตัดสินใจแล้วว่าฉันต้องการ (อย่างน้อยที่สุด) ที่มีเธรดแยกต่างหากเพื่อจัดการซ็อกเก็ตเครือข่ายซึ่งแตกต่างจากส่วนอื่น ๆ ของเครื่องยนต์ที่จัดการห่วงกราฟิกและสคริปต์
ฉันมีวิธีที่เป็นไปได้วิธีหนึ่งในการสร้างเกมเครือข่ายแบบเธรดเดียวทั้งหมดซึ่งต้องตรวจสอบเครือข่ายหลังจากแสดงแต่ละเฟรมโดยใช้ซ็อกเก็ตที่ไม่ปิดกั้น อย่างไรก็ตามสิ่งนี้ไม่เหมาะสมอย่างชัดเจนเพราะเวลาที่ใช้ในการเรนเดอร์เฟรมจะถูกเพิ่มเข้ากับความล่าช้าของเครือข่าย: ข้อความที่มาถึงผ่านเครือข่ายจะต้องรอจนกว่าการเรนเดอร์เฟรมปัจจุบัน แต่อย่างน้อยวิธีการเล่นเกมนี้จะยังคงราบรื่นไม่มากก็น้อย
การมีเธรดแยกต่างหากสำหรับการเชื่อมต่อเครือข่ายช่วยให้เกมสามารถตอบสนองต่อเครือข่ายได้อย่างสมบูรณ์ตัวอย่างเช่นมันสามารถส่งแพ็กเก็ต ACK กลับทันทีเมื่อได้รับการอัพเดตสถานะจากเซิร์ฟเวอร์ แต่ฉันสับสนเล็กน้อยเกี่ยวกับวิธีที่ดีที่สุดในการสื่อสารระหว่างรหัสเกมและรหัสเครือข่าย เธรดเครือข่ายจะผลักแพ็คเก็ตที่ได้รับไปยังคิวและเธรดเกมจะอ่านจากคิวในเวลาที่เหมาะสมระหว่างการวนรอบของมันดังนั้นเราจึงไม่ได้กำจัดความล่าช้าแบบ up-to-one-frame นี้
นอกจากนี้ดูเหมือนว่าฉันต้องการให้เธรดที่จัดการการส่งแพ็กเก็ตแยกจากที่กำลังตรวจสอบแพ็กเก็ตที่ลงมาในท่อเพราะมันจะไม่สามารถส่งออกได้ในขณะที่มันอยู่ตรงกลาง ตรวจสอบว่ามีข้อความเข้ามาหรือไม่ ฉันกำลังคิดเกี่ยวกับการทำงานของselect
หรือคล้ายกัน
ฉันเดาคำถามของฉันคืออะไรวิธีที่ดีที่สุดในการออกแบบเกมสำหรับการตอบสนองเครือข่ายที่ดีที่สุด? เห็นได้ชัดว่าลูกค้าควรส่งข้อมูลผู้ใช้โดยเร็วที่สุดเท่าที่จะทำได้ไปยังเซิร์ฟเวอร์ดังนั้นฉันจึงอาจมีรหัสส่งสุทธิมาทันทีหลังจากวนรอบการประมวลผลเหตุการณ์ทั้งภายในวงเกม สิ่งนี้สมเหตุสมผลหรือไม่?