ฉันกำลังสร้างเกมออนไลน์ครั้งแรกโดยใช้ socket.io และฉันต้องการให้เป็นเกมแบบผู้เล่นหลายคนแบบเรียลไทม์เช่น agar.io หรือ diep.io
แต่ฉันพบปัญหาในการพยายามหาวิธีที่จะทำให้คอมพิวเตอร์ทั้งหมดทำงานด้วยความเร็วเดียวกัน
ฉันมีสามแนวคิดสำหรับแบบจำลอง แต่ไม่มีแนวคิดใดที่ถูกต้องและฉันสงสัยว่าวิดีโอเกมปกติทำได้อย่างไร (คุณสามารถข้ามอ่านความคิดของฉันพวกเขาเพียงให้วิธีการดูปัญหาที่ฉันมี)
เซิร์ฟเวอร์อนุญาตให้ไคลเอนต์ทำงานด้วยตนเองและส่งต่อการอัปเดตไปยังเซิร์ฟเวอร์ซึ่งจะส่งต่อไปยังไคลเอนต์ที่เหลือ นี่เป็นปัญหาที่คอมพิวเตอร์บางเครื่องทำงานได้เร็วกว่าเครื่องอื่น ๆ ทำให้พวกเขาอัปเดตเร็วขึ้นและเคลื่อนที่ข้ามหน้าจอเร็วขึ้น
ให้เซิร์ฟเวอร์แจ้งให้ลูกค้าทราบเมื่อมีการอัปเดต ฉันสามารถรอจนกว่าลูกค้าคนสุดท้ายจะตอบสนอง (เป็นความคิดที่แย่มากในกรณีที่คนคนหนึ่งมีคอมพิวเตอร์ช้า) รอจนกว่าลูกค้าคนแรกจะตอบสนอง (อีกครั้งรอการสื่อสารก่อนแต่ละเฟรม) หรือเพียงแค่ส่งพวกเขาให้เร็วที่สุด ดูเหมือนว่าจะพบปัญหาเดียวกันกับหมายเลข 1)
ที่จุดเริ่มต้นของเกมให้เซิร์ฟเวอร์บอกกับลูกค้าถึงวิธีการอัปเดตอย่างรวดเร็ว นี่หมายความว่าลูกค้าจะต้องรับผิดชอบในการ จำกัด การเคลื่อนไหวในช่วงเวลานั้น ตัวอย่างเช่นหากมีคนจัดการกดปุ่มสองครั้งภายในช่วงเวลานั้นก็จะส่งเหตุการณ์กดปุ่มเพียงปุ่มเดียว นี่เป็นปัญหาที่การดำเนินการบางอย่างอาจถูกเพิกเฉย (เช่นการกดปุ่มสองครั้ง) และการโต้ตอบจะขึ้นอยู่กับนาฬิกาของลูกค้าซึ่งอาจไม่ตรงกับนาฬิกาของเซิร์ฟเวอร์ เซิร์ฟเวอร์จะต้องติดตามลูกค้าแต่ละรายและตรวจสอบให้แน่ใจว่ามีการส่งการอัปเดตในเวลาที่ถูกต้อง
ฉันได้ทำการค้นคว้าแล้ว แต่บทความที่ฉันอ่านดูเหมือนจะไม่เจาะจงว่าจะทำอย่างไรถ้าลูกค้าส่งการอัพเดตเร็วกว่าไคลเอนต์อื่น ๆ
ในกรณีของฉันฉันกำลังติดต่อกับคนที่มีความเร็วแป้นพิมพ์เร็วกว่า (คอมพิวเตอร์จะส่งการอัปเดตแป้นพิมพ์มากกว่าคอมพิวเตอร์เครื่องอื่น)
โปรแกรมเมอร์มักจะจัดการกับเรื่องนี้อย่างไร