คำถามติดแท็ก networking

คอมพิวเตอร์สองเครื่องขึ้นไปเชื่อมต่อกันผ่านการเชื่อมต่อด้วยสายเคเบิลหรือการสื่อสารไร้สายเพื่อการแลกเปลี่ยนข้อมูล

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

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

10
UDP ยังดีกว่า TCP สำหรับเกมเรียลไทม์ที่มีข้อมูลมากหรือไม่?
ฉันรู้ว่าโดยปกติแล้ว UDP จะแนะนำสำหรับเกมแบบผู้เล่นหลายคนแบบเรียลไทม์ที่มีการใช้ข้อมูลสูง บทความส่วนใหญ่มีอายุปีเป็น serval และเนื่องจาก ~ 80% ของข้อมูลทั้งหมดที่ส่งบนอินเทอร์เน็ตคือ TCP จึงต้องมีการปรับแต่งให้เหมาะสมสำหรับ TCP นี่ทำให้ฉันสงสัย: UDP ยังเหนือกว่าในแง่ของความเร็วและความล่าช้าหรือไม่? การเพิ่มประสิทธิภาพ TCP ล่าสุดทำให้ TCP ทำงานได้ดีกว่า UDP หรือไม่
71 c++  networking  udp  realtime 

9
โปรโตคอล TCP นั้นดีพอสำหรับเกมแบบผู้เล่นหลายคนตามเวลาจริงหรือไม่?
ย้อนกลับไปในวันนี้การเชื่อมต่อ TCP ผ่านการเรียกเลขหมาย / ISDN / บรอดแบนด์ความเร็วสูงทำให้เกมขาด ๆ หาย ๆ เนื่องจากแพ็กเก็ตที่ถูกทิ้งเพียงครั้งเดียวส่งผลให้มีการซิงค์ซ้ำ นั่นหมายถึงนักพัฒนาเกมจำนวนมากต้องใช้เลเยอร์ความน่าเชื่อถือของตนเองที่ด้านบนของ UDP หรือพวกเขาใช้ UDP สำหรับข้อความที่อาจจะหล่นหรือได้รับตามลำดับและใช้การเชื่อมต่อ TCP แบบขนานสำหรับข้อมูลที่ต้องเชื่อถือได้ เมื่อพิจารณาจากผู้ใช้โดยเฉลี่ยมีการเชื่อมต่อเครือข่ายที่เร็วขึ้นตอนนี้เกมเรียลไทม์เช่น FPS สามารถให้ประสิทธิภาพที่ดีกว่าการเชื่อมต่อ TCP หรือไม่?
57 networking 

9
เกมที่กำหนดขึ้นมามีความเป็นไปได้อย่างไรในการเผชิญกับการไม่กำหนดระดับทศนิยม
เพื่อให้เกมเหมือนเครือข่าย RTS ฉันได้เห็นคำตอบมากมายที่นี่แนะนำให้ทำเกมที่กำหนดไว้อย่างสมบูรณ์ จากนั้นคุณจะต้องถ่ายโอนการกระทำของผู้ใช้ไปยังแต่ละอื่น ๆ และล่าช้าสิ่งที่ปรากฏเล็กน้อยเพื่อที่จะ "ล็อคใน" การป้อนข้อมูลของทุกคนก่อนที่จะแสดงเฟรมถัดไป ดังนั้นสิ่งต่าง ๆ เช่นตำแหน่งของยูนิตสุขภาพ ฯลฯ ไม่จำเป็นต้องได้รับการอัปเดตตลอดเวลาผ่านเครือข่ายเพราะการจำลองของผู้เล่นทุกคนจะเหมือนกันทุกประการ ฉันยังได้ยินสิ่งเดียวกันที่แนะนำสำหรับการทำรีเพลย์ อย่างไรก็ตามเนื่องจากการคำนวณจุดลอยตัวนั้นไม่ได้ถูกกำหนดระหว่างเครื่องหรือแม้แต่ระหว่างการรวบรวมโปรแกรมเดียวกันบนเครื่องเดียวกันสิ่งนี้เป็นไปได้จริงหรือ เราจะป้องกันความจริงที่ว่าทำให้เกิดความแตกต่างเล็กน้อยระหว่างผู้เล่น (หรือไกล) ที่กระเพื่อมตลอดทั้งเกมได้อย่างไร ฉันได้ยินบางคนแนะนำให้หลีกเลี่ยงจำนวนจุดลอยตัวทั้งหมดและใช้intเพื่อแสดงความฉลาดของเศษส่วน แต่นั่นไม่ได้ฟังดูเป็นประโยชน์สำหรับฉัน - ถ้าฉันต้องการตัวอย่างเช่นถ่ายมุมโคไซน์ของมุม? ฉันจำเป็นต้องเขียนห้องสมุดคณิตศาสตร์ทั้งหมดใหม่หรือไม่? โปรดทราบว่าฉันสนใจ C # เป็นหลักซึ่งเท่าที่ฉันสามารถบอกได้มีปัญหาเหมือนกับ C ++ ในเรื่องนี้

9
ฉันจะสร้างเกมแบบผู้เล่นหลายคนแบบ peer-to-peer ได้อย่างไร [ปิด]
ฉันจะสร้างเกมผู้เล่นหลายคน p2p ได้อย่างไร ฉันต้องการเกมที่มีผู้เล่นหลายคนโดยไม่ใช้เซิร์ฟเวอร์ แต่แล้วลูกค้าทั้งหมดรู้จักกันได้อย่างไร ทำไมโปรโตคอล p2p จึงมีชื่อเสียงมากในการถ่ายโอนไฟล์ แต่ไม่ใช่ในเกมที่มีผู้เล่นหลายคน?

4
การทำนายการเคลื่อนไหวสำหรับผู้ที่ไม่ใช่นักกีฬา
ฉันกำลังทำงานในเกม 2D แบบสามมิติที่มีผู้เล่นหลายคนในระดับปานกลางโดยมีผู้เล่นประมาณ 20-30 คนเชื่อมต่อพร้อมกันกับเซิร์ฟเวอร์ถาวร ฉันมีปัญหาในการใช้การทำนายการเคลื่อนไหวที่ดี ฟิสิกส์ / การเคลื่อนไหว เกมดังกล่าวไม่มีการนำฟิสิกส์มาใช้อย่างแท้จริง แต่ใช้หลักการพื้นฐานเพื่อทำให้เกิดการเคลื่อนไหว แทนที่การป้อนข้อมูลแบบโพลอย่างต่อเนื่องการเปลี่ยนแปลงสถานะ (เช่น / เมาส์ลง / ขึ้น / ย้ายเหตุการณ์) ใช้เพื่อเปลี่ยนสถานะของเอนทิตีอักขระที่ผู้เล่นควบคุม ทิศทางของผู้เล่น (เช่น / ตะวันออกเฉียงเหนือ) รวมกับความเร็วคงที่และเปลี่ยนเป็นเวกเตอร์ 3 มิติที่แท้จริง - ความเร็วของเอนทิตี ในลูปเกมหลัก "อัปเดต" จะถูกเรียกก่อน "วาด" ตรรกะการอัปเดตจะทำให้เกิด "ภารกิจการอัปเดตทางฟิสิกส์" ที่ติดตามเอนทิตีทั้งหมดด้วยความเร็วที่ไม่เป็นศูนย์ใช้การรวมขั้นพื้นฐานมากเพื่อเปลี่ยนตำแหน่งเอนทิตี ตัวอย่างเช่น: entity.Position + = entity.Velocity.Scale (ElapsedTime.Seconds) (โดยที่ "วินาที" เป็นค่าจุดลอยตัว แต่วิธีการเดียวกันจะใช้งานได้กับค่าจำนวนเต็มมิลลิวินาที) จุดสำคัญคือไม่ต้องใช้การแก้ไขสำหรับการเคลื่อนไหว - เครื่องยนต์ฟิสิกส์พื้นฐานไม่มีแนวคิดของ "สถานะก่อนหน้า" …

2
วิธีการเครือข่ายระบบนิติบุคคลนี้
ฉันได้ออกแบบระบบเอนทิตีสำหรับ FPS มันใช้งานได้ดังนี้: เรามี "โลก" - วัตถุเรียกว่า GameWorld สิ่งนี้ถืออาร์เรย์ของ GameObject เช่นเดียวกับอาร์เรย์ของ ComponentManager GameObject ถืออาร์เรย์ของ Component นอกจากนี้ยังมีกลไกเหตุการณ์ซึ่งง่ายมาก คอมโพเนนต์เองอาจส่งเหตุการณ์ไปยังเอนทิตีซึ่งออกอากาศไปยังส่วนประกอบทั้งหมด ส่วนประกอบนั้นเป็นสิ่งที่ให้ GameObject คุณสมบัติบางอย่างและเนื่องจาก GameObject เป็นเพียงภาชนะของพวกเขาทุกอย่างที่เกี่ยวข้องกับวัตถุเกมเกิดขึ้นในส่วนประกอบ ตัวอย่างเช่น ViewComponent, PhysicsComponent และ LogicComponent หากต้องการการสื่อสารระหว่างกันก็สามารถทำได้ผ่านการใช้เหตุการณ์ ComponentManager เป็นเพียงส่วนต่อประสานเช่นเดียวกับ Component และสำหรับแต่ละชั้น Component โดยทั่วไปควรจะมีหนึ่ง ComponentManager ผู้จัดการส่วนประกอบเหล่านี้มีความรับผิดชอบในการสร้างส่วนประกอบและเริ่มต้นพวกเขาด้วยคุณสมบัติอ่านจากสิ่งที่ชอบไฟล์ XML ComponentManager ยังดูแลการอัพเดทส่วนประกอบต่างๆเช่น PhysicsComponent ที่ฉันจะใช้ห้องสมุดภายนอก (ซึ่งทำทุกอย่างในโลกพร้อมกัน) สำหรับการกำหนดค่าฉันจะใช้โรงงานสำหรับเอนทิตีที่จะอ่านไฟล์ XML หรือสคริปต์สร้างส่วนประกอบที่ระบุในไฟล์ (ซึ่งเพิ่มการอ้างอิงไปยังผู้จัดการองค์ประกอบที่เหมาะสมสำหรับการอัปเดตจำนวนมาก) และ จากนั้นอัดมันเข้าไปในวัตถุ GameObject มาถึงปัญหาของฉันแล้วฉันจะลองใช้มันกับเกมที่มีผู้เล่นหลายคน …

4
การทำนายฝั่งไคลเอ็นต์ทำงานอย่างไร
ฉันได้อ่าน Valve + Gafferon และอีกหลายร้อยหน้าจาก Google แต่ด้วยเหตุผลใดก็ตามที่ฉันไม่สามารถคาดเดาลูกค้าได้ เพื่อความเข้าใจของฉันปัญหาพื้นฐานคือ: ลูกค้า A ส่งอินพุตที่ T0 เซิร์ฟเวอร์รับอินพุตที่ T1 ลูกค้าทั้งหมดได้รับการเปลี่ยนแปลงเวลา T2 T2อย่างไรก็ตามเมื่อใช้การคาดการณ์ของลูกค้าลูกค้า A อยู่ในตำแหน่งที่เหมาะสมT4แล้ว คุณจะมั่นใจได้อย่างไรว่าลูกค้า A เมื่อคาดการณ์ว่าเซิร์ฟเวอร์จะยอมรับคำขอการเคลื่อนไหวจะไม่นำหน้าเซิร์ฟเวอร์ เห็นได้ชัดว่าทุกครั้งที่พวกเขาอยู่ข้างหน้าผลนี้ในการหักกลับไปที่เซิร์ฟเวอร์ครั้งล่าสุดเห็นพวกเขา ด้วยการแก้ไขทั้งหมดที่ฉันได้ลองสิ่งนี้ยังคงเห็นได้ชัดเจนเมื่อคุณหยุดเพราะเซิร์ฟเวอร์หยุดตามคุณ

5
การชดเชยความล่าช้าด้วยเกม 2D บนเครือข่าย
ฉันต้องการสร้างเกม 2 มิติที่เป็นเกม sandbox / กิจกรรมที่ขับเคลื่อนด้วยฟิสิกส์ มีบางอย่างที่ฉันไม่เข้าใจจริงๆ จากการวิจัยดูเหมือนว่าการอัปเดตจากเซิร์ฟเวอร์ควรอยู่ที่ประมาณ 100 มิลลิวินาทีเท่านั้น ฉันสามารถดูว่ามันใช้งานได้อย่างไรสำหรับผู้เล่นเนื่องจากพวกเขาสามารถจำลองฟิสิกส์พร้อมกันและทำการชดเชยความล่าช้าผ่านการแก้ไข สิ่งที่ฉันไม่เข้าใจก็คือวิธีนี้ใช้งานได้กับการอัปเดตจากผู้เล่นคนอื่น หากลูกค้าได้รับแจ้งตำแหน่งผู้เล่นทุก ๆ 100 มิลลิวินาทีเท่านั้นฉันไม่เห็นว่ามันทำงานได้อย่างไรเพราะมีจำนวนมากที่สามารถเกิดขึ้นได้ใน 100ms ผู้เล่นสามารถเปลี่ยนทิศทางได้สองครั้งหรือมากกว่านั้นในเวลานั้น ฉันสงสัยว่าใครจะมีความเข้าใจในเรื่องนี้บ้าง โดยทั่วไปแล้ววิธีนี้ใช้งานได้กับการถ่ายภาพและอะไรแบบนั้น? ขอบคุณ

2
ประสิทธิภาพการทำงานมีประโยชน์อย่างไรในการบันทึกอักขระที่ล็อกอินทั้งหมดใน MMO ในช่วงเวลาปกติ
MMORPGS ส่วนใหญ่มีระบบ Worldsave ที่จะบันทึกอักขระทั้งหมดทุกๆ X ชั่วโมง ฉันคิดว่าเหตุผลก็คือประสิทธิภาพ เหตุใดจึงดีกว่าประสิทธิภาพการทำงานที่ดีกว่าการบันทึกอักขระในการตัดการเชื่อมต่อ

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

9
การบีบอัดเดลต้าลดจำนวนข้อมูลที่ส่งผ่านเครือข่ายอย่างไร
เกมหลายเกมใช้เทคนิคการบีบอัดเดลต้าเพื่อลดการโหลดข้อมูลที่ส่ง ฉันไม่เข้าใจว่าเทคนิคนี้ลดภาระการโหลดข้อมูลได้อย่างไร ตัวอย่างเช่นสมมติว่าฉันต้องการส่งตำแหน่ง โดยไม่ต้องบีบอัดเดลต้าผมส่งกับตำแหน่งที่แน่นอนของกิจการเช่นvector3 (30, 2, 19)ด้วยการบีบอัดเดลต้าผมส่งกับตัวเลขที่มีขนาดเล็กvector3(0.2, 0.1, 0.04) ฉันไม่เข้าใจว่ามันลดการโหลดข้อมูลอย่างไรถ้าทั้งสองข้อความมีvector3- 32 บิตสำหรับแต่ละ float - 32 * 3 = 96 บิต! ฉันรู้ว่าคุณสามารถแปลงแต่ละ float เป็น byte แล้วแปลงกลับจาก byte เป็น float แต่ทำให้เกิดข้อผิดพลาดที่แม่นยำซึ่งมองเห็นได้

2
สิ่งที่จะส่งไปยังเซิร์ฟเวอร์ในเกม FPS แบบเรียลไทม์?
วิธีที่ถูกต้องในการบอกตำแหน่งของผู้เล่นท้องถิ่นของเราไปยังเซิร์ฟเวอร์คืออะไร? เอกสารบางฉบับบอกว่าเป็นการดีกว่าที่จะส่งอินพุตเมื่อใดก็ตามที่มีการผลิต และเอกสารบางอย่างบอกว่าลูกค้าส่งตำแหน่งในช่วงเวลาที่แน่นอน ด้วยวิธีการส่งอินพุต: ฉันควรทำอย่างไรหากผู้เล่นกดปุ่มทิศทางค้างไว้ มันหมายความว่าฉันต้องส่งแพคเกจไปยังเซิร์ฟเวอร์ในทุก ๆ เฟรม มันไม่มากเกินไปเหรอ? และยังมีการหมุนของผู้เล่นจากอินพุตของเมาส์ นี่คือตัวอย่าง: http://www.gabrielgambetta.com/fpm_live.html สิ่งที่เกี่ยวกับการส่งตำแหน่งในแนวทางช่วงเวลาคงที่ มันส่งข้อความน้อยเกินไปไปยังเซิร์ฟเวอร์ แต่มันยังลดการตอบสนอง แล้วทางไหนดีกว่ากัน?

9
เทคนิคในการป้องกันลูกค้าที่ไม่เป็นทางการในการเล่นเกมเครือข่าย?
ในเกมเครือข่ายผู้เล่นหลายคนมีเทคนิคอะไรบ้างที่จะพยายามให้แน่ใจว่าผู้ใช้เชื่อมต่อกับแอปพลิเคชันไคลเอนต์อย่างเป็นทางการไม่ใช่แอพไคลเอ็นต์แฮ็กบางตัว ฉันรู้ว่าอาจไม่มีวิธีที่แน่นอนในการทำเช่นนี้ แต่ฉันสนใจในเทคนิคที่สามารถใช้เพื่อลดปัญหาได้ ฉันสนใจเป็นพิเศษเกี่ยวกับเทคนิคใด ๆ ที่สามารถใช้สำหรับเกมบนเว็บ แต่ฉันคิดว่าส่วนใหญ่สามารถใช้งานได้ทั่วไป ขอขอบคุณ!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.