คู่มือเกมแลค › L1 โปรเซสเกมฝั่งไคลเอนต์
คอขวดการประมวลผลแพ็กเก็ตบนเมนเธรด Network processing on the main thread
ID สาเหตุ cg-net-mainthread · ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →
ถ้าประมวลผลแพ็กเก็ตที่รับมาได้แค่จำนวนที่กำหนดในแต่ละเฟรม แพ็กเก็ตที่ทะลักเข้ามาจะถูกเลื่อนไปเฟรมถัดไปเรื่อย ๆ
ทำไม ในที่ที่คนเยอะ มีอัปเดตเข้ามาหลายพันรายการต่อวินาที → ผลคือ เมนเธรดชนเพดานปริมาณที่ประมวลผลได้ต่อเฟรม จึงอ่านได้ไม่หมด → บนหน้าจอ การเคลื่อนไหวของคนอื่นแสดงช้าลงเรื่อย ๆ แล้วมาเป็นชุดรวดเดียว
อาการ กรอเร็ว , อินพุตดีเลย์
ปัจจัย การหยุดชะงัก, ความหน่วง
ใครเจอ บางจุด/บางแชนแนล, เราคนเดียว
เกิดเมื่อไร ตอนคนแห่มารวมกัน
ผู้รับผิดชอบ ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม ไคลเอนต์: แยกการรับและการแปลงข้อมูลไปไว้อีกเธรด, รวมอัปเดตตำแหน่งเก่าของเป้าหมายเดียวกันแล้วใช้เฉพาะอันล่าสุด เซิร์ฟเวอร์: ในที่ที่คนเยอะ ส่งอัปเดตของตัวละครที่อยู่ไกลให้ห่างขึ้นเพื่อลดปริมาณการส่ง
ตัวเลขที่ควรรู้ เมื่อแพ็กเก็ตที่ประมวลผลไม่ทันกองรอ แค่ไม่กี่วินาทีก็ตามหลังไปถึง 1 วินาทีได้แล้ว
บนกราฟ สูงตามจำนวนคนและโหลด · จำนวนแพ็กเก็ตขาเข้าที่ประมวลผลไม่ทัน, ดีเลย์ตั้งแต่รับจนนำไปใช้
จุดที่ต้องดู จำนวนแพ็กเก็ตที่ไคลเอนต์ประมวลผลไม่ทันและเหลือไว้ในแต่ละเฟรม และดีเลย์ตั้งแต่แพ็กเก็ตมาถึงจนนำไปใช้ในเกม เก็บเป็น log แล้วดูคู่กับจำนวนคนรอบตัว สัญญาณว่าใช่ ในที่ที่คนเยอะ จำนวนแพ็กเก็ตที่เหลือและดีเลย์การนำไปใช้เพิ่มขึ้นเรื่อย ๆ ขณะที่ปิงและช่วงห่างการส่งของเซิร์ฟเวอร์ในเวลาเดียวกันปกติ สัญญาณว่าไม่ใช่ ไม่มีดีเลย์การนำไปใช้ แต่ตัวแพ็กเก็ตเองมาถึงช้า: น่าจะเป็นช่วงเครือข่าย ถ้าเฟรมไทม์สูงขึ้นมาก น่าจะเป็น “ภาระการเรนเดอร์ตัวละครจำนวนมาก” วิธีตรวจ ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม
แหล่งอ้างอิง Actor Priority in Unreal Engine Epic Games เมื่อแบนด์วิดท์ไม่พอ จะจัดลำดับความสำคัญตามระยะห่างจากผู้ดูและเวลาตั้งแต่ replicate ครั้งล่าสุด แทนการ replicate ทุก actor ทุกครั้ง Replication Graph in Unreal Engine Epic Games เกมที่มีผู้เชื่อมต่อและเป้าหมายที่ต้อง replicate จำนวนมาก (เช่น MMORPG) ต้องจัดกลุ่มตามตำแหน่งแล้วส่งเฉพาะเป้าหมายที่จำเป็น จึงจะเลี่ยงคอขวด CPU ของเซิร์ฟเวอร์ได้
สาเหตุที่ควรดูประกอบ
ชั้นเดียวกัน: L1 โปรเซสเกมฝั่งไคลเอนต์
สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กรอเร็ว)
ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง