เซิร์ฟเวอร์เว็บไซต์และเซิร์ฟเวอร์เกมเชื่อมต่อกันอย่างไร?
1. มีเกมหลายประเภทมาดู MMORPG ก่อน
ไม่ว่าเซิร์ฟเวอร์ RPG จะง่ายแค่ไหนมันก็หลีกเลี่ยงไม่ได้ที่จะจัดการกับการโต้ตอบแบบหลายคน ในสถานการณ์เดียวกันผู้คนหลายร้อยคนจำเป็นต้องได้รับข้อมูลการดำเนินงานจากคนอื่น ๆ
ประการที่สองการดำเนินงานของผู้ใช้บ่อยมากและเซิร์ฟเวอร์ทั่วไปมักจะมีการเชื่อมต่อที่ยาวนาน ยิ่งไปกว่านั้นการเชื่อมโยงเหล่านี้มีปฏิสัมพันธ์กันบ่อยครั้งและไม่มีกลยุทธ์การแบ่งพาร์ติชันแบบถาวรอย่างชัดเจนดังนั้นพวกเขาจึง จำกัด การปรับขนาดแนวนอนของเซิร์ฟเวอร์ สถานการณ์เดียวกันมักจะทำงานบนเครื่องทางกายภาพเดียวเท่านั้น
อีกครั้งเกมพีซีมักจะไม่กล้าดำเนินการตรรกะบนไคลเอนต์ ผู้ใช้แตกให้คุณในไม่กี่นาทีเปลี่ยนเหรียญทองและแปรงอุปกรณ์สองชิ้น ดังนั้นเซิร์ฟเวอร์แผนที่นี้จะต้องตรวจสอบการดำเนินงานของผู้เล่นทุกคนในแผนที่และคำนวณชุดของตรรกะทางธุรกิจเช่น Monster AI และอัตราการลดลง
เราจะเห็นได้ว่าเซิร์ฟเวอร์เกมแบบดั้งเดิมนั้นแตกต่างจากเว็บเซิร์ฟเวอร์อย่างเห็นได้ชัดว่ามีความต้องการทางธุรกิจที่ไม่ซ้ำกันเช่นการเชื่อมต่อที่ยาวนานการออกอากาศหลายครั้งตรรกะทางธุรกิจที่ซับซ้อนและกลยุทธ์การแบ่งพาร์ติชันที่ จำกัด
2. มาดูประโยชน์ของการเกิดขึ้นพร้อมกันกับเซิร์ฟเวอร์เกม
การเกิดขึ้นพร้อมกันเป็นกระบวนการเชิงตรรกะของโปรแกรมและไม่จำเป็นต้องมีการสนับสนุนทางกายภาพแบบหลายคอร์ ความหมายทั่วไปคือการทำให้กระแสตรรกะอิสระหลายอย่างดูเหมือนว่าพวกเขากำลังทำงานในเวลาเดียวกัน การทำงานร่วมกันระดับระบบการดำเนินงานเป็นโมเดลหลายเธรดหลายกระบวนการ ปล่อยให้ระบบปฏิบัติการจัดการขัดจังหวะการปิดกั้น I/O และปัญหาอื่น ๆ
สำหรับเซิร์ฟเวอร์หากมีการใช้งานส่วนใหญ่ใน I/O กลไกการทำงานพร้อมกันสามารถป้องกันไม่ให้บริการแผนที่ทั้งหมดถูกบล็อกโดยการเข้าถึง I/O เมื่องานถูกบล็อกจัดสรรทรัพยากรการคำนวณสำรองให้กับงานอื่น ๆ ในกรณีนี้การเกิดพร้อมกันจะเป็นประโยชน์ต่อประสิทธิภาพการทำงานของเซิร์ฟเวอร์และเวลาตอบสนอง
สำหรับโปรแกรมเมอร์การไหลแบบตรรกะอิสระหมายความว่าพวกเขาสามารถทำงานให้เสร็จสมบูรณ์ในบริบทที่เชื่อถือได้ง่ายและคู่กันอย่างหลวม
เนื่องจากสวิตช์ตรรกะระหว่างตัวจัดการระบบปฏิบัติการจะต้องติดอยู่ในเคอร์เนลซ้ำ ๆ บางคนคิดว่านี่ช้าเกินไปดังนั้นพวกเขาจึงทำบางเธรดในพื้นที่ผู้ใช้และควบคุมการไหลเชิงตรรกะหลายครั้งในกระบวนการ เนื่องจากข้อ จำกัด ของความสามารถในการอธิบายภาษาจึงลำบากเกินไปที่จะเขียนและใช้สิ่งต่าง ๆ ใน C/C ++ ดังนั้นน้ำตาลไวยากรณ์ coroutine ใน Erlang, GO, Lua ถูกสร้างขึ้น
node.js เป็นหลักควบคุมสตรีมเชิงตรรกะหลายตัวด้วยตัวเอง แต่สตรีมเชิงตรรกะนี้กระจายตามสถานะ I/O และมีลำดับความสำคัญ ในการใช้งานจริงมันพยายามที่จะใช้ I/O ที่ไม่ปิดกั้นแบบอะซิงโครนัสให้มากที่สุด เมื่องานเดียวเรียกว่า I/O ฉันจะหยุดและรอจนกว่าสัญญาณของ I/O จะถูกส่งขึ้นมาฉันรีสตาร์ทมัน
หมายเหตุสิ่งนี้ทุกครั้งที่ฉันทำงานและฉันจะไม่เปลี่ยนไปใช้สตรีมโปรแกรมอื่น ๆ จนกว่าจะเสร็จสิ้นหรือมีการโทร I/O เกิดขึ้น ดังนั้นหากงานนี้เกี่ยวข้องกับการคำนวณมากเกินไปกระบวนการแผนที่ทั้งหมดจะถูกบล็อกที่นี่
และเนื่องจาก node.js เป็นแบบอะซิงโครนัสจึงจำเป็นต้องเขียนการโทรกลับอย่างต่อเนื่องเพื่อฟังสัญญาณที่เสร็จสมบูรณ์โดย I/O การไหลแบบลอจิคัลของงานเดียวจะถูกขัดจังหวะหลายครั้ง เมื่องานค่อนข้างซับซ้อน Callbak Hell ที่เรียกว่าจะทำให้เกิดปัญหาใหญ่สำหรับการดีบักและการพัฒนา
3. เนื่องจากเหตุผลข้างต้นฉันไม่แนะนำให้ใช้ node.js ในการพัฒนาเซิร์ฟเวอร์ MMORPG ที่ไม่ใช่โปรโตเทม
4. เซิร์ฟเวอร์เกมมือถือที่เพิ่งเกิดขึ้นเมื่อเร็ว ๆ นี้ค่อนข้างเหมาะสำหรับ node.js เนื่องจากเกมมือถือถูก จำกัด ให้กับปัญหาเครือข่าย และเซิร์ฟเวอร์สามารถตรวจสอบข้อมูลคีย์ได้เท่านั้นและเป็นไปไม่ได้ที่จะจัดการกับสถานการณ์ที่หลายคนโต้ตอบ ฝั่งเซิร์ฟเวอร์นั้นง่ายขึ้นมากจนไม่แตกต่างจากเว็บเซิร์ฟเวอร์ ตรรกะทางธุรกิจยังง่ายการประมวลผลข้อมูลและยังคงอยู่