จำลองเกมแล็กและแพ็กเก็ตสูญหาย
เน็ตโค้ดถูกเขียนบนการเชื่อมต่อในเครื่องที่มี ping 1 ms และถูกทดสอบโดยผู้เล่นบน Wi-Fi โรงแรม เครื่องมือนี้ปิดช่องว่างนั้นบนเครื่องของคุณเอง เฉพาะกับโปรเซสของเกม ขณะที่ส่วนที่เหลือของคอมพิวเตอร์ยังใช้งานได้
เริ่มที่นี่
เจาะจงไคลเอนต์เกม ให้มันมีการเชื่อมต่อแย่แบบสมจริง และปล่อยให้มันหยุดเองหลังห้านาที:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 3 --target mygame.exe --duration 300
มีไทม์ไลน์สำเร็จรูปสำหรับเรื่องนี้ด้วย overloaded-game-server.json ในโฟลเดอร์ scenarios พาการเชื่อมต่อเข้าสู่ความคับคั่งแล้วพากลับออกมา คุณจึงเห็นว่าไคลเอนต์รับมือการเปลี่ยนทั้งสองทิศทางอย่างไร ดู สถานการณ์ตามเวลา
ทำไมเกมจึงแสดงการสูญหายในขณะที่เบราว์เซอร์ไม่แสดง
ทราฟฟิกของเกมส่วนใหญ่เป็น UDP และ UDP ไม่มีอะไรให้ซ่อนการสูญหาย หน้าเว็บบน TCP ส่งซ้ำอย่างเงียบ ๆ และใช้เวลานานขึ้นเท่านั้น เบราว์เซอร์จึงรู้สึกปกติได้ที่การสูญหาย 5% ขณะที่แมตช์ที่ 5% เท่ากันกระตุก ดึงตัวละครกลับ และเสียการซิงก์
นั่นทำให้เกมเป็นที่ทดสอบการสูญหายที่ตรงไปตรงมา สิ่งที่คุณตั้งคือสิ่งที่ไคลเอนต์ประสบจริง
ตั้งอะไร และมันเผยอะไร
| การตั้งค่า | ลอง | เผยอะไร |
|---|---|---|
| ความหน่วง | 80 ถึง 250 ms | การคาดการณ์และการแทรกค่า ตัวละครของคุณลื่นถอยหลังหลังยิงหรือไม่ |
| จิตเตอร์ | 40 ถึง 100 ms | การบัฟเฟอร์ 200 ms ที่นิ่งซ่อนง่ายกว่า ping ที่ขยับตลอด |
| การสูญหาย | 2 ถึง 10% | การอัปเดตสถานะที่หายไป และไคลเอนต์ฟื้นตัวหรือค่อย ๆ เพี้ยน |
| สไปก์ | 1 วินาที นาน ๆ ครั้ง | การหยุดนิ่งที่เกิดจากการส่งต่อระหว่างเสา มักเป็นแบบที่น่าเกลียดที่สุด |
| เปิดและปิดลิงก์ | รอบ 10 s ดับ 30% | เชื่อมต่อใหม่และกลับเข้าร่วม |
วัดจิตเตอร์เป็นช่องว่างระหว่างเปอร์เซ็นไทล์ที่ 95 กับค่ามัธยฐาน ไม่ใช่ค่าเฉลี่ย จิตเตอร์แทบไม่ขยับค่าเฉลี่ย จึงเป็นเหตุผลที่การรันหนึ่งอาจดูเหมือนกันบนกระดาษแต่เล่นแล้วต่างกัน
เทียบสองบิลด์ต้องมี seed
การสูญหายแบบสุ่มทำให้สองการรันต่างกัน ดังนั้น “บิลด์ใหม่รู้สึกแย่กว่า” จึงไม่ใช่หลักฐาน seed เดียวกันเล่นซ้ำการสูญหายและจิตเตอร์ชุดเดิม ซึ่งเปลี่ยนความรู้สึกให้เป็นการเปรียบเทียบ:
BeanNetworkTester.exe --latency 120 --jitter 60 --loss 5 --seed 42 --target mygame.exe --duration 180
สิ่งที่มันทำไม่ได้
มันกำหนดรูปร่างทราฟฟิกของเครื่องคุณ มันไม่ทำให้เซิร์ฟเวอร์ช้าลง ไม่เปลี่ยนอัตราติ๊กของเซิร์ฟเวอร์ และไม่ทำให้ผู้เล่นคนอื่นอยู่บนการเชื่อมต่อแย่ มันจึงทดสอบไคลเอนต์ของคุณกับลิงก์ที่แย่ ไม่ใช่เซิร์ฟเวอร์ของคุณภายใต้โหลด สำหรับฝั่งเซิร์ฟเวอร์ต้องใช้การทดสอบโหลด และสำหรับล็อบบี้ที่เต็มไปด้วยการเชื่อมต่อแย่ต้องใช้มากกว่าหนึ่งเครื่อง