การจำลองทางฟิสิกส์ฝั่งเซิร์ฟเวอร์ที่มีผู้เล่นหลายร้อยคน


9

ขณะนี้ฉันกำลังทำงานในเกมแนวฟิสิกส์ที่ผู้เล่นคนเดียวซึ่งฉันต้องการให้ฟิสิกส์เป็นฝั่งเซิร์ฟเวอร์จำลอง นี่เป็นเพราะเกมจะมีกระดานผู้นำผู้เล่นที่ต่อเนื่องและอื่น ๆ และฉันต้องการป้องกันการโกงใด ๆ - โดยทั่วไปเป็นสถาปัตยกรรมไคลเอนต์ - เซิร์ฟเวอร์ที่แท้จริงไคลเอนต์ "โง่" และแสดงเฉพาะสิ่งที่เซิร์ฟเวอร์ต้องการให้คุณแสดง

อย่างไรก็ตามปัญหาคือเกมนี้มีผู้เล่นหลายร้อยคน (อาจจะเป็นพันคน) ในเวลาเดียวกัน เรื่องนี้เกี่ยวข้องกับฉันเพราะมันน่าจะทำให้พลังในการประมวลผลของเซิร์ฟเวอร์ลดลงถ้าฉันต้องทำและรักษาสถานะเป็นร้อย ๆ รายการในเวลาเดียวกัน

ฉันจะไม่มีปัญหาในการย้ายการจำลองฟิสิกส์ทั้งหมดไปยังฝั่งไคลเอ็นต์ แต่จากนั้นฉันจะต้องมีวิธีการตรวจสอบจริง ๆ ถ้าผลลัพธ์ของการจำลองไคลเอ็นต์นั้นถูกต้อง อย่างไรก็ตามฉันไม่สามารถหาวิธี

ฉันคิดเกี่ยวกับการใช้ฝั่งเซิร์ฟเวอร์จำลองนาน ๆ ครั้งเพื่อตรวจสอบว่าไคลเอนต์ยังคงเล่นอยู่ แต่ฉันต้องการให้เซิร์ฟเวอร์มีความเครียดน้อยที่สุดเท่าที่จะทำได้

วิชาฟิสิกส์จะมีความซับซ้อนเท่ากับการสาธิต GDC 2011 โดย Glenn Fiedlerซึ่งอาจจะง่ายกว่า อย่างไรก็ตามฉากที่มีการชนกันของร่างกายที่แข็งกระด้างจะอยู่ในฉากเดียวและพวกมันจะมองเห็นได้ในครั้งเดียว

ฉันมีความยากลำบากในการได้รับคำตอบของกรณีนี้เนื่องจากทรัพยากรส่วนใหญ่บนเว็บ - อีกครั้งเว็บไซต์ Glenn Fiedlers เป็นเว็บไซต์ที่ยอดเยี่ยม - พูดถึงฟิสิกส์เครือข่ายขนาดเล็ก (เช่น FPS ที่มีผู้เล่น 30 คนเช่น Halo)

คำแนะนำเว็บไซต์เอกสารหรือสิ่งที่ชอบในเรื่องใด ๆ จะได้รับการชื่นชมมาก

สรุปคำถามที่ฉันต้องการคำตอบ:

  • รูปแบบไคลเอนต์ - เซิร์ฟเวอร์มีความเป็นไปได้อย่างไร พลังในการประมวลผลของเซิร์ฟเวอร์ของฉันเกี่ยวข้องกับกฎหมายหรือไม่?
  • เป็นไปได้หรือไม่ที่จะตรวจสอบความน่าเชื่อถือของการจำลองแบบฟิสิคัลที่ลูกค้ารันบนเซิร์ฟเวอร์? ถ้าเป็นเช่นนั้นได้อย่างไร

ฉันจะปล่อยให้คำถามนี้เปิดอีกสักครู่ด้วยความหวังผู้คนจำนวนมากจะโพสต์ความคิดของพวกเขา คำขอบคุณของฉันออกไปหาคนที่ไม่ได้อ่าน
Lennard Fonteijn

ตราบใดที่ไคลเอนต์ต่าง ๆ มีความเป็นอิสระคุณควรไม่มีปัญหาในการปรับขนาดในแนวนอน ใช้สิ่งที่ต้องการเช่น EC2 นำความจุมาสู่ระบบออนไลน์ตามต้องการ
ipeet

1
ปัญหาอยู่ที่ไหนถ้าใครบางคนโกงในเกมผู้เล่นคนเดียว? เพียงปล่อยให้พวกเขาดีกว่าวางความคิดลีดเดอร์บอร์ดและมุ่งเน้นไปที่การสร้างเกมผู้เล่นคนเดียวที่สนุกสนาน
Maik Semder

2
"เป็นไปได้หรือไม่ที่จะตรวจสอบความน่าเชื่อถือของการจำลองทางฟิสิกส์ที่ดำเนินการโดยไคลเอนต์บนเซิร์ฟเวอร์" ใช่เป็นไปได้ที่จะตรวจสอบ แต่อ่านความคิดเห็นของคุณด้านล่าง: การวางแผนของคุณในการมอบเงิน RL ให้กับคะแนนสูงสุดและคล้ายกับเกมปาเป้าเช่นหลังจากการขว้างปาฟิสิกส์เริ่มต้น ปัญหาที่นี่มีน้อยกว่าที่จะตรวจสอบฟิสิกส์นี้เป็นเรื่องง่าย ปัญหาคือคุณจะมีคนโกงที่ปล่อยให้โปรแกรมคอมพิวเตอร์ทำการโยนเพื่อให้คะแนนสมบูรณ์แบบ
Daniel Carlsson

ฟิสิกส์ที่ผ่านการตรวจสอบเซิร์ฟเวอร์ในโลกที่ใช้ร่วมกันนั้นเป็นไปได้ทั้งหมด DCUO เป็นตัวอย่างที่ดีของเรื่องนี้ โปรดทราบว่า "เซิร์ฟเวอร์" หมายถึง "กล่องเซิร์ฟเวอร์จำนวนมาก" ในขณะที่คุณดูเหมือนจะเขียนในแง่ของ "เซิร์ฟเวอร์" เป็นกล่องเดียวนั่งอยู่ที่ไหนสักแห่ง ปัจจุบันคุณไม่สามารถจำลองนักแสดงอิสระหลายพันคนในพื้นที่ทางกายภาพเดียวกันดังนั้นจึงไม่มีการพูดคุยกัน สิ่งที่คุณทำได้คือกระจายผู้เล่นหลายพันคนออกไปสู่เกาะจำลองที่ไม่มีปฏิสัมพันธ์
Patrick Hughes

คำตอบ:


5

คุณสามารถตรวจสอบความถูกต้องของการส่งของผู้ใช้รายอื่นและรายงานให้ลูกค้าทราบหากการส่งนั้นดูไม่ถูกต้อง

จากนั้นคุณสามารถดำเนินการได้ (ห้ามแบนสิบแปดมงกุฎหรือแบนผู้ปลอมแปลงรายงานเท็จ) เพื่อตรวจสอบตัวเองว่าการส่งนั้นไม่ถูกต้องจริงหรือไม่คุณสามารถใช้ลูกค้าพิเศษหรืออะไรก็ได้


3
นั่นคือสมาร์ทสวยจริงเหี้ย! คงไม่คิดเลยว่าลูกค้าอย่างน้อย 2 หรือ 3 คนจะต้องทำการจำลองในกรณีที่ลูกค้าที่ใช้งานคนอื่นการจำลองของเขากำลังโกง - ในกรณีที่เซิร์ฟเวอร์สามารถทำการจำลองขั้นสุดท้ายได้เสมอหากลูกค้าทุกคนรายงานสิ่งแปลก ๆ .
Lennard Fonteijn

1

เกมของคุณคือผู้เล่นคนเดียว 'การโต้ตอบ' กับผู้เล่นคนอื่น ๆ เท่านั้นคือผู้นำ คุณสามารถวางไข่เป็นตัวอย่างเพื่อตรวจสอบการจำลองบนเซิร์ฟเวอร์ของคุณสำหรับการส่งแต่ละครั้งคุณไม่จำเป็นต้องใช้เทคนิคทั้งหมดเพื่อให้แน่ใจว่าฟิสิกส์เหมือนกันกับลูกค้า 30 รายดังนั้นฉันไม่คิดว่าคุณต้องการทรัพยากรมากกว่าที่คุณมีอยู่แล้วตั้งแต่ ฟิสิกส์ใช้งานได้แล้ว :)

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

ฉันไม่รู้ว่าการจำลองของคุณเป็นอย่างไรติดตั้งและไม่โต้ตอบ (ง่ายต่อการตรวจสอบ) หรือหากผู้เล่นสามารถโต้ตอบกับซิมในขณะที่มันกำลังทำงานอยู่ได้ แต่ต้องแน่ใจว่าคุณทำฟิสิกส์ของคุณในแบบที่แตกต่างกัน การเป็นตัวแทนจุดไม่ทำให้เลอะและทำให้การเรียกใช้ที่ถูกต้องดูไม่ถูกต้อง


ฉันไม่ต้องการระบุรายละเอียดของรูปแบบการเล่น แต่คุณสามารถเปรียบเทียบเกมของฉันกับเกมปาเป้าได้: เมื่อคุณได้เล็งและขว้างไปแล้วฟิสิกส์ก็เข้ายึดและไม่มีอะไรที่คุณสามารถเปลี่ยนแปลงได้ อีกต่อไป ความรู้นี้จะเปลี่ยนคำตอบของคุณ?
Lennard Fonteijn

ไม่มันจะไม่เปลี่ยนแปลงอะไร :) เพียงแค่จัดเก็บรีเพลย์บนเซิร์ฟเวอร์และตรวจสอบเฉพาะรายการที่น่าสงสัย (เช่นคะแนนสูงสุดใหม่)
Roy T.

1

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

รูปแบบที่ดีกว่าซึ่งฉันตั้งใจจะลองในครั้งต่อไปของสถานการณ์ประเภทนี้นำเสนอตัวเองคือการเลือกผู้เล่นส่วนย่อยของฐานผู้เล่นของคุณน้อยมากจากนั้นคุณจำลองสถานการณ์ฝั่งเซิร์ฟเวอร์ของพวกเขาในเวลาสั้น ๆ และเปรียบเทียบผลลัพธ์ของพวกเขา โดยปราศจากความรู้ของพวกเขา หากพวกเขาเบี่ยงเบนไปมาก (คุณต้องคาดหวังความแตกต่างระดับหนึ่ง) จากนั้นคุณจัดว่าพวกเขาเป็นคนขี้โกงที่อาจเกิดขึ้นและจำลองพวกเขาต่อไปอีกสักครู่เพื่อยืนยันอีกต่อไป สิ่งที่คุณจะได้รับคือเส้นโค้งบางส่วนจากจำนวนผู้เล่นที่ถูกต้องตามกฎหมายเมื่อเทียบกับเซิร์ฟเวอร์ที่ได้รับอิทธิพลจากสภาพเครือข่าย ฯลฯ และคุณจะเห็นได้อย่างรวดเร็วว่าคนขี้โกงอยู่นอกเส้นโค้งนี้ ระบบนี้มีประโยชน์ดังต่อไปนี้:

  • อัตโนมัติ
  • คุณไม่เสียสละการตอบสนอง
  • ในขณะที่คุณเพิ่งจำลองส่วนย่อยของฐานผู้เล่นขนาดเล็กมากโหลดจะสามารถจัดการได้และสามารถปรับขนาดได้ (บางทีคุณอาจเลือกผู้เล่นน้อยลงเพื่อจำลองหากโหลดสูง)
  • ใช้ได้กับทุกเกมที่ฉันนึกได้

โดยทั่วไปแล้วเช่น Roy คุณพูดว่า: เก็บฝั่งไคลเอ็นต์เก็บ "ไกล" เมื่อลูกค้าส่งคะแนนและตรวจสอบความถูกต้องของรีเพลย์เหล่านั้นเป็นครั้งคราว (ไม่ใช่ทั้งหมดเป็นเปอร์เซ็นต์) จะเป็นอย่างไรถ้าหากทำตามคะแนนที่ลูกค้าส่งให้การชำระเครดิตเสร็จแล้ว - ส่วนของผู้เล่น, เครดิตยังสามารถซื้อด้วยเงินจริง (!!!) - คุณยังแนะนำวิธีการนี้หรือไม่? หากการโกงให้เครดิตในปริมาณที่มากเกินไปและฉันตรวจสอบเพียงครั้งเดียวฉันจะสูญเสียเงินโดยทั่วไป คุณอาจตั้งค่าสถานะบุคคลเมื่อคะแนนของเขาเกินเกณฑ์ที่กำหนด แต่จะมีวิธีที่ดีกว่านี้หรือไม่
Lennard Fonteijn

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

ผู้ที่เกี่ยวข้องกับสินเชื่อคุณควรตรวจสอบการเล่นซ้ำทุกครั้งเนื่องจากการโกงไม่ได้อยู่ในอันดับต้น ๆ ของรายการคะแนนสูงสุด แต่เพื่อรับเงิน คุณต้องการความปลอดภัยมากขึ้นถ้าเงินมีส่วนเกี่ยวข้องฉันไม่สามารถช่วยคุณได้
รอยต.

@RoyT ฉันอาจจะทำอย่างนั้นต่อไปแม้ว่าฉันจะไม่จ่ายเงินตามเครดิต (มีบางคนเข้าใจผิดว่าฉันเดา?) ฉันตั้งใจจะมีนโยบายการผ่อนปรนเป็นศูนย์ดังนั้นฉันเพิ่งแบทช์ไฟล์ซ้ำสำหรับการตรวจสอบ หากสงสัยจริงๆฉันจะลงมือทำ
Lennard Fonteijn

1

ดังที่ Daniel กล่าวว่าปัญหาใหญ่ที่นี่จะเป็นรายการที่ดำเนินการสำหรับผู้เล่น ไม่มีความจำเป็นที่จะต้องมีการบิดเบือนทางฟิสิกส์ในเกมหากผู้เล่นมีแขนหุ่นยนต์ที่มีความแม่นยำในการแก้ไขปัญหาทางระบบประสาท


ฉันอาจไม่ชัดเจน เกมของฉันจะให้เครดิตเสมือนแก่คุณหลังจากเล่นเกมเสร็จแล้ว คุณสามารถใช้เครดิตเหล่านี้เพื่อปลดล็อกเนื้อหาใหม่เพื่อเล่นกับ คุณสามารถใช้เงินจริงเพื่อซื้อเครดิตเพื่อปลดล็อกเนื้อหาได้เร็วขึ้น (โปรดทราบว่าไม่ใช่ Pay2Win ฉันเกลียดสิ่งนั้น) ฉันไม่มีความตั้งใจจะจ่ายเงินจริงตามเครดิต ที่กล่าวว่าปาเป้าเป็นเพียงคำเปรียบเทียบเพื่ออธิบายว่านักเล่นเกมมีอิทธิพลต่อสถานะของร่างกายที่แข็งแกร่งแค่ไหนฉันไม่กลัว "aimbots" เพราะจะทำให้คุณได้เปรียบ 0
Lennard Fonteijn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.