โมเดลเครือข่าย
- โมเดลเครือข่ายของ Quake 3 เป็นส่วนที่สง่างามที่สุดส่วนหนึ่งของเอนจิน โดยเน้นว่าในสภาพแวดล้อมที่รวดเร็ว ข้อมูลที่ไม่ได้รับในการส่งครั้งแรกก็ไม่คุ้มค่าที่จะส่งซ้ำ
- ใช้ UDP/IP และไม่ใช้การส่งแบบเชื่อถือได้ของ TCP/IP เพราะทำให้เกิดความหน่วง
- สแตกเครือข่ายถูกขยายด้วยชั้นที่แยกจากกันโดยสิ้นเชิงสองชั้น: การเข้ารหัสด้วยคีย์ที่แชร์ไว้ล่วงหน้า และการบีบอัดด้วยคีย์ Huffman ที่คำนวณไว้ล่วงหน้า
- ระบบฝั่งเซิร์ฟเวอร์โดดเด่นในการลดขนาดของ UDP datagram ให้เล็กที่สุด ขณะเดียวกันก็ชดเชยข้อจำกัดด้านความเชื่อถือได้ของ UDP
สถาปัตยกรรม
- ฝั่งไคลเอนต์เรียบง่าย โดยในแต่ละเฟรมจะส่งคำสั่งไปยังเซิร์ฟเวอร์และรับการอัปเดตสถานะของเกมกลับมา
- เซิร์ฟเวอร์ต้องกระจายสถานะเกมหลักไปยังไคลเอนต์แต่ละราย และต้องคำนึงถึงการสูญหายของแพ็กเก็ต UDP
- องค์ประกอบหลักมีสามส่วน: สถานะเกมหลัก, การส่งคำสั่งของไคลเอนต์ผ่าน Netchannel, และสแนปช็อตที่เก็บสถานะเกมล่าสุด 32 รายการไว้ในอาร์เรย์แบบวนรอบ
ระบบสแนปช็อต
- เมื่อเซิร์ฟเวอร์ส่งการอัปเดตไปยังไคลเอนต์ จะคัดลอกสถานะเกมหลักไปยังช่องประวัติถัดไปของไคลเอนต์เสมอ แล้วเปรียบเทียบกับสแนปช็อตอื่น
- หากไม่มีสแนปช็อตที่ใช้งานได้ จะใช้ "สแนปช็อตจำลอง" เพื่อสร้างการอัปเดตแบบเต็ม
- เมื่อไคลเอนต์ยืนยันว่าได้รับการอัปเดตก่อนหน้าแล้ว ระบบจะส่งเฉพาะการอัปเดตบางส่วน
- แม้แพ็กเก็ตจะสูญหาย ก็ยังใช้กระบวนการเดียวกัน โดยส่งทั้งข้อมูลที่ก่อนหน้านี้ยังไม่ได้รับและข้อมูลใหม่รวมกันในข้อความเดียว
ความทนทานต่อหน่วยความจำและ C
- Quake3 เปรียบเทียบสแนปช็อตโดยไม่มี introspection และตำแหน่งของแต่ละฟิลด์ถูกกำหนดไว้ล่วงหน้าผ่านอาร์เรย์และคำสั่งพรีโปรเซสเซอร์
- ใช้โครงสร้าง
netField_t เพื่อกำหนดตำแหน่งและขนาดของฟิลด์ และใช้สิ่งนี้ในการส่งความแตกต่างผ่านเครือข่าย
การแบ่งล่วงหน้า
- โมดูล NetChannel แบ่งข้อความออกเป็นชิ้นละ 1400 ไบต์ก่อนส่ง เพื่อป้องกันไม่ให้เราเตอร์ต้องทำ packet fragmentation
- การทำ fragmentation โดยเราเตอร์มีต้นทุนสูง เพราะเมื่อเข้าสู่เครือข่ายอาจทำให้แพ็กเก็ตถูกบล็อก และเมื่อออกจากเครือข่ายต้องรอให้ทุกชิ้นมาครบ
ข้อความแบบเชื่อถือได้และไม่เชื่อถือได้
- ระบบสแนปช็อตช่วยชดเชย UDP datagram ที่สูญหายบนเครือข่าย แต่ข้อความและคำสั่งบางอย่างจำเป็นต้องส่งถึงปลายทางอย่างแน่นอน
- การรับประกันนี้ถูกทำให้เป็นนามธรรมผ่าน NetChannel
1 ความคิดเห็น
ความคิดเห็นบน Hacker News