ฉันทำสิ่งนี้เพื่อเกมแข่งรถ PSP เชิงพาณิชย์ซึ่งทำงานได้ทั้งบนเครือข่ายเฉพาะกิจและผ่านฮอตสปอตไร้สาย (หรือไปยังเซิร์ฟเวอร์แบบคงที่บนอินเทอร์เน็ตหากต้องการ)
เนื่องจากจุดที่ 2 ระบบไม่จำเป็นต้องมีความซับซ้อนเกี่ยวกับการปรับให้เหมาะสม
จากประสบการณ์ของฉันมันไม่เป็นความจริง อุปกรณ์ไร้สาย (โดยเฉพาะอุปกรณ์พกพาขนาดเล็ก) ไม่เหมือนกับคอมพิวเตอร์ที่มีการเชื่อมต่อเครือข่ายแบบมีสาย - สมาร์ทโฟนและเครื่องเล่นเกมไร้สายมักจะมีอินเตอร์เฟสเครือข่ายที่ช้าสำหรับจุดประสงค์ของเกม
อย่าเข้าใจฉันผิด - ปริมาณงานของพวกเขามักจะดี (นั่นคือปริมาณข้อมูลต่อวินาทียอดเยี่ยมสำหรับการสตรีมภาพยนตร์หรืออื่น ๆ ) แต่เวลาแฝงในการส่งแพ็คเก็ตนั้นอาจแย่มากและอาจเป็นเช่นนั้น ตัวแปรสูงที่เป็นเรื่องยากที่จะประเมินว่าแต่ละแพ็กเก็ตจะใช้เวลานานแค่ไหนในการส่งมอบ รูปแบบนี้ยิ่งแย่ลงเนื่องจากอุปกรณ์ไร้สายถูกรวมเข้าด้วยกันในพื้นที่ทั่วไปแห่งหนึ่งเนื่องจากสัญญาณของพวกเขาเริ่มรบกวนซึ่งกันและกัน ด้วยเหตุนี้เวลาของฉันค่อนข้างมากที่ใช้ในการลดจำนวนของแพ็กเก็ตที่จำเป็นในการส่งดังนั้นเราจะมีการชนกันของแพ็กเก็ตน้อยลง (โปรดทราบว่านี่เป็นปัญหาที่ค่อนข้างน้อยในกรณีที่เกี่ยวข้องกับฮอตสปอตเครือข่ายที่ใช้พลังงานมากกว่าการให้อุปกรณ์พูดคุยกันโดยตรงผ่านเครือข่ายเฉพาะกิจ)
ตัวอย่างของการเพิ่มประสิทธิภาพประเภทนี้เกมแข่งรถของเราเกิดขึ้นในโลกที่มีสัญญาณไฟจราจร หลายพันคน และเราจำเป็นต้องตรวจสอบให้แน่ใจว่าสัญญาณของพวกเขาอยู่ในระหว่างผู้เล่นทุกคนในเซสชั่นเครือข่าย แทนที่จะพยายามส่งแพ็กเก็ตโดยบอกให้ทุกคนทราบว่าไฟอยู่ในสถานะใดเราได้กำหนดตารางเวลาแบบคงที่สำหรับสัญญาณไฟจราจรทั้งหมดจากนั้นตรวจสอบให้แน่ใจว่าลูกค้าทุกคนตกลงกันใน "เวลาเล่นเกม" ในปัจจุบัน เนื่องจากพวกเขาทุกคนรู้เวลาเล่นเกมและสถานะของสัญญาณไฟจราจรทั้งหมดสามารถกำหนดได้จากเวลาเล่นเกมเราจึงซิงโครไนซ์ข้อมูลสถานะทั้งหมดนั้นโดยไม่ส่งข้อมูลพิเศษใด ๆ การเปลี่ยนแปลงครั้งนี้สร้างความแตกต่างอย่างมากสำหรับประสิทธิภาพเครือข่ายของเรา
สิ่งที่กล่าวว่าการสร้างนาฬิกาซิงค์ที่เชื่อถือได้ระหว่างอุปกรณ์ไร้สายหลาย ๆ อัน (ด้วยเวลา ping ที่แตกต่างกันอย่างมากเนื่องจากการสูญเสียแพ็คเก็ต) เป็นความท้าทายที่ยิ่งใหญ่ ยินดีที่จะพูดคุยเกี่ยวกับเรื่องนี้ถ้าคุณมีความสนใจ
ลูกค้าแต่ละรายสามารถเป็นแหล่งข้อมูลที่เชื่อถือได้เกี่ยวกับตัวเขาและสภาพแวดล้อมในทันที (ตัวอย่างเช่นหัวข้อย่อย)
นี่คือสิ่งที่เราทำและมันทำงานได้ดีสำหรับเราในสถานการณ์ของเรา (รถยนต์) แน่นอนว่าส่วนที่มีปัญหาคือเมื่อวัตถุหยุดเข้าใกล้ผู้เล่น 'a' มากกว่าผู้เล่น 'b' และความเป็นเจ้าของของมันจึงโอนจากผู้เล่นคนหนึ่งไปยังผู้เล่นคนอื่น
นี่เป็นการเจรจาต่อรองที่ซับซ้อนอย่างน่าประหลาดใจระหว่างผู้เล่นโดยที่เกม 'a' เสนอให้กับเกม 'b': "ฉันคิดว่าวัตถุนี้ใกล้คุณมากขึ้นคุณควรควบคุมมัน" จากนั้นเกม 'b' อาจยอมรับหรืออาจปฏิเสธตามมุมมองของตัวเองเกี่ยวกับสถานการณ์ ความแตกต่างในสถานะของเกมที่รับรู้ระหว่าง 'a' และ 'b' และการเปลี่ยนแปลงเวลาระหว่างเมื่อมีการส่งและรับคำร้องขอและการตอบสนองทำให้การเจรจาเล็ก ๆ น้อย ๆ น่ารังเกียจเป็นพิเศษเพื่อให้ได้รับความน่าเชื่อถือ "ฮ็อตมันฝรั่ง" ที่มีการเป็นเจ้าของวัตถุที่กระเด้งไปมาอย่างต่อเนื่องระหว่างผู้เล่นหลายคน และแม้ว่ามันจะทำงานได้อย่างถูกต้องเมื่อดูจากจุดชมวิวของเกม 'c' มี '
สัญชาตญาณของฉันคือวิธีการ "ความเป็นเจ้าของวัตถุ" แบบนี้น่าจะยุ่งยากเกินไปสำหรับวัตถุขนาดเล็กที่มีอายุสั้นเช่นกระสุน เราใช้มันสำหรับรถยนต์การจราจรและนักแข่งรถ AI ซึ่งมีแนวโน้มที่จะมีชีวิตอยู่ในแบบจำลองเป็นเวลานาน ดูเหมือนว่าวิธีการที่มีประสิทธิภาพมากขึ้นถ้าคุณเต็มใจที่จะเชื่อใจลูกค้าจะต้องมีเกมของผู้เล่นแต่ละคนเป็นเจ้าของตำแหน่งและโปรเจคของพวกเขาและประกาศเมื่อผู้เล่นคนนั้นโดนกระสุนปืนของผู้อื่น (เช่นเดียวกับ "เกม A" ฉันต้องรับผิดชอบในการพูดว่าผู้เล่น A และขีปนาวุธของผู้เล่น A อยู่ที่ไหน แต่ผู้เล่น B รับผิดชอบในการพูดว่าฉันกดผู้เล่น B หรือไม่) ด้วยการคิดบัญชีที่ดีคุณควรจะมีพฤติกรรมที่สมเหตุสมผลออกจากระบบเช่นนี้