ข้อจำกัดความรับผิดชอบ: ประสบการณ์การเขียนโปรแกรมเกมของฉันอิงจากเกมผู้เล่นเดี่ยวฝั่งไคลเอ็นต์ แต่ฉันมีพื้นหลังในเว็บแอปพลิเคชัน (โดยเฉพาะบนสแต็คของ Microsoft) ดังนั้นฉันจึงมาจากคำตอบนี้ ใช้ แต่ไม่มีการทดสอบจริงเซิร์ฟเวอร์เกมจริงมันยากที่จะบอกว่ามันจะใช้ แต่นี่จะไป รู้สิ่งนี้: ฉันไม่ได้ปรับใช้เซิร์ฟเวอร์เกม webapps เท่านั้น
ฉันขอแนะนำวิธีการระดับสอง (เซิร์ฟเวอร์) ระดับฐานข้อมูลและระดับ "แอปพลิเคชัน" ด้วยระดับที่สาม (การนำเสนอ) เป็นไคลเอนต์เกมของคุณ
ฐานข้อมูลเชิงสัมพันธ์สามารถสืบค้นข้อมูลได้ดีและสามารถเขียนข้อมูลได้ดี กุญแจสำคัญคือซีเรียลไลซ์เซชันฐานข้อมูลของคุณเป็นขนาดที่จัดการได้ซึ่งคลัสเตอร์ของคุณสามารถจัดการได้ รุ่นที่สูงขึ้น (ศูนย์ข้อมูล / องค์กร) ของ SQL Server รองรับการทำคลัสเตอร์และการจำลองแบบ ฉันจะเริ่มต้นด้วยการสร้างกลุ่มเล็ก ๆ และเรียกใช้แบบสอบถามเพื่อดูว่ามันทำงานอย่างไร
ในระดับแอปพลิเคชันถ้าคุณทำ "การแบ่งเขต" หรือสิ่งที่คล้ายกันคุณสามารถหนีไปได้โดยไม่ต้องตั้งค่าคลัสเตอร์ใด ๆ และเพียงติดตั้งเซิร์ฟเวอร์ต่อโซน หากโซนของคุณมีขนาดใหญ่คุณสามารถตั้งค่าคลัสเตอร์สำหรับแต่ละโซนได้
คุณจะต้องสร้างกระบวนการทำให้เป็นอันดับสำหรับการส่งข้อมูลจากระดับชั้นของแอปพลิเคชัน -> ชั้นฐานข้อมูล กุญแจสำคัญคือการมีหลายระดับของการเป็นอันดับที่เกิดขึ้น บางสิ่งเช่นนี้
- ระดับ 1: บันทึกลงในฐานข้อมูลทุก ๆ สิบวินาทีรวมถึงข้อมูลที่สำคัญ:
- สุขภาพผู้เล่น
- รายการผู้เล่น / รถปิคอัพ
- ระดับ 2: บันทึกลงในฐานข้อมูลทุกๆ 2 วินาทีรวมถึงข้อมูลขนาดกลาง:
- ตำแหน่งของผู้เล่น
- ตำแหน่งของ NPC
- ระดับ 3: ทุกสิ่งทุกอย่างไม่บ่อยเท่าที่จะเป็นไปได้
สิ่งนี้จะทำให้การเขียนของคุณสอดคล้องและคาดการณ์ได้ทั้งนี้ขึ้นอยู่กับลักษณะของเกมของคุณคุณอาจมีการเขียนฐานข้อมูลไม่บ่อยนัก กุญแจสำคัญคือการตระหนักว่าหากเซิร์ฟเวอร์แอปพลิเคชันของคุณเกิดขัดข้องคุณจะต้องกลับมาออนไลน์จากสถานะในฐานข้อมูลของคุณดังนั้นการจัดอันดับคลังโฆษณาของผู้เล่นทุก ๆ 90 นาทีอาจทำให้ผู้เล่นอารมณ์เสีย
สำหรับการอ่านข้อมูลคุณจะต้องโหลดหน่วยความจำให้มากที่สุดเท่าที่จะเป็นไปได้ในแอพพลิเคชั่นเทียร์ให้มากที่สุดจากนั้นตรวจสอบให้แน่ใจว่าโค้ดทั้งหมดของคุณใช้พูลหน่วยความจำนี้ ดังที่ Joe ชี้ให้เห็นจะมีบางครั้งที่คุณต้องการธุรกรรม "เรียลไทม์" คุณควรมี IO เพียงพอในฐานข้อมูลของคุณเพื่อทำธุรกรรมแบบเรียลไทม์เมื่อจำเป็นโดยสันนิษฐานว่ามีฮาร์ดแวร์เพียงพอบนเซิร์ฟเวอร์ฐานข้อมูล / คลัสเตอร์