คำถามติดแท็ก client-server

โมเดลไคลเอ็นต์ - เซิร์ฟเวอร์เป็นโมเดลการคำนวณแบบรวมศูนย์ที่หนึ่งโหนด (เซิร์ฟเวอร์) ดำเนินการบริการบางอย่างสำหรับโหนดอื่น ๆ (ไคลเอ็นต์)

2
นี่เป็นสถาปัตยกรรมที่เหมาะสมสำหรับเกมบนมือถือ MMORPG ของเราหรือไม่
ทุกวันนี้ฉันพยายามออกแบบสถาปัตยกรรมของเกม MMORPG บนมือถือใหม่สำหรับ บริษัท ของฉัน เกมนี้คล้ายกับ Mafia Wars, iMobsters หรือ RISK แนวคิดพื้นฐานคือการเตรียมกองทัพให้พร้อมเพื่อต่อสู้กับคู่ต่อสู้ของคุณ (ผู้ใช้ออนไลน์) แม้ว่าก่อนหน้านี้ฉันเคยทำงานกับแอพมือถือหลายตัว แต่นี่เป็นสิ่งใหม่สำหรับฉัน หลังจากการต่อสู้อย่างหนักฉันได้พบกับสถาปัตยกรรมที่แสดงด้วยความช่วยเหลือของแผนภาพการไหลระดับสูง: เราตัดสินใจที่จะไปกับรูปแบบไคลเอนต์ - เซิร์ฟเวอร์ จะมีฐานข้อมูลส่วนกลางบนเซิร์ฟเวอร์ ลูกค้าแต่ละรายจะมีฐานข้อมูลท้องถิ่นของตัวเองซึ่งจะยังคงซิงค์กับเซิร์ฟเวอร์ ฐานข้อมูลนี้ทำหน้าที่เป็นแคชสำหรับจัดเก็บสิ่งต่าง ๆ ที่ไม่เปลี่ยนแปลงบ่อยครั้งเช่นแผนที่ผลิตภัณฑ์สินค้าคงคลังเป็นต้น ด้วยรุ่นนี้ฉันไม่แน่ใจว่าจะแก้ไขปัญหาต่อไปนี้ได้อย่างไร: อะไรจะเป็นวิธีที่ดีที่สุดในการซิงโครไนซ์เซิร์ฟเวอร์และฐานข้อมูลลูกค้า เหตุการณ์ควรถูกบันทึกลงในฐานข้อมูลท้องถิ่นก่อนที่จะอัปเดตไปยังเซิร์ฟเวอร์หรือไม่ ถ้าแอพยุติลงด้วยเหตุผลบางอย่างก่อนที่จะบันทึกการเปลี่ยนแปลงในฐานข้อมูลส่วนกลาง คำร้องขอ HTTP แบบง่ายจะมีจุดประสงค์ในการซิงโครไนซ์หรือไม่ จะทราบได้อย่างไรว่าผู้ใช้คนใดที่เข้าสู่ระบบอยู่ในปัจจุบัน? (วิธีหนึ่งอาจให้ไคลเอนต์ส่งคำขอไปยังเซิร์ฟเวอร์หลังจากทุก ๆ x นาทีเพื่อแจ้งว่ามีการใช้งานอยู่มิฉะนั้นให้ถือว่าไคลเอ็นต์ไม่ทำงาน) การตรวจสอบด้านลูกค้าเพียงพอหรือไม่ หากไม่มีวิธีการคืนค่าการกระทำหากเซิร์ฟเวอร์ไม่ได้ตรวจสอบบางอย่าง? ฉันไม่แน่ใจว่านี่เป็นวิธีแก้ปัญหาที่มีประสิทธิภาพหรือไม่ ฉันจะขอบคุณมาก ๆ ถ้าคนที่ทำงานในแอพนั้นสามารถแบ่งปันประสบการณ์ซึ่งอาจช่วยให้ฉันได้เจอสิ่งที่ดีกว่า ขอบคุณล่วงหน้า. ข้อมูลเพิ่มเติม: ฝั่งไคลเอ็นต์ถูกนำไปใช้ในเอ็นจิ้นเกม C ++ ที่เรียกว่ามาร์มาเลด นี่คือเอ็นจิ้นเกมข้ามแพลตฟอร์มซึ่งหมายความว่าคุณสามารถเรียกใช้แอพของคุณในระบบปฏิบัติการมือถือที่สำคัญทั้งหมด เราสามารถบรรลุเธรดได้อย่างแน่นอนและยังแสดงให้เห็นในแผนภาพการไหลของฉัน …

3
การสอดแทรกตำแหน่งในเกมที่มีผู้เล่นหลายคน
เพื่อประหยัดแบนด์วิดธ์ในเกมที่มีผู้เล่นหลายคนของฉันฉันจะไม่อัปเดตทุกออบเจ็กต์ทุก ๆ เห็บเซิร์ฟเวอร์แทนแต่ละอ๊อพเจ็กมีอัปเดตให้คะแนนซึ่งบอกเกมว่าวัตถุนี้คาดว่าจะได้รับการอัพเดท เมื่อฉันได้รับข้อความอัปเดตสำหรับวัตถุฉันคำนวณเวลาที่ฉันคาดว่าจะมีการอัพเดทครั้งต่อไป: origin = serverCurrentPosition diff = serverNextPosition - origin arriveTime = now + timeBetweenTicks * updateRate เมื่อฉันวาดวัตถุฉันจะคำนวณเวลาที่เหลือจนถึงการอัปเดตครั้งถัดไปและแก้ไขตำแหน่งตามนั้น: step = 100 / timeBetweenTicks * updateRate delta = 1 - step * ((arriveTime - now) / 100) position = origin + diff * delta มันใช้งานได้ ... แต่ยังมีความกระวนกระวายใจเล็กน้อยในการวาดแม้ว่าในทฤษฎีของฉันทุกสิ่งควรจะทำงานได้ดีเพราะมาตราส่วนควรดูแลความล่าช้าบางอย่างใช่ไหม? ดังนั้นคำถามนี่คือนี่เป็นวิธีที่ดีที่สุดหรือไม่? ฉันควรใส่ความล่าช้าที่เกิดขึ้นจริงในการคำนวณหรือไม่? …

3
Javascript และ PHP สำหรับผู้เล่นหลายคนแบบเรียลไทม์? [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน2 ปีที่ผ่านมา ฉันสงสัยว่าการรวม Javascript clientside กับ PHP / mysql serverside เป็นความคิดที่ดีสำหรับเกมเบราว์เซอร์ HTML5 แบบเรียลไทม์ (ขนาดเล็ก) หรือไม่ ความรู้ด้านเทคนิคของฉันมี จำกัด มากและแม้ว่าฉันจะวางแผนที่จะเรียนรู้ node.js ในอนาคต แต่ช่วงการเรียนรู้ก็ค่อนข้างใหญ่ในตอนนี้ ตั้งแต่ฉันคุ้นเคยกับ PHP ฉันรู้สึกว่าฉันจะทำให้มันทำงานได้เร็วขึ้นมาก สเกลที่ฉันคิดคือผู้เล่น 2-8 คนในเวลานั้น และพยายามที่จะทำให้ไคลเอนต์กับเซิร์ฟเวอร์ข้อความนับเป็นต่ำที่สุด ค่าที่ฉันตั้งใจจะจัดเก็บ / จัดการคือ: ชื่อผู้เล่นและรหัส ตำแหน่ง X และ Y สุขภาพ. รายการที่ติดตั้ง (สูงสุด 8 ช่องอาจน้อยกว่า) …

4
ฐานข้อมูลใด (RDBMS เทียบกับ NoSQL และ BOTH) สำหรับเกม Realtime Multiplayer
ฉันทำงานกับเกมแบบเรียลไทม์ที่จะต้องใช้ฐานข้อมูล (สำหรับคุณสมบัติเช่นโปรไฟล์ผู้เล่นเพื่อนปลดล็อคข่าว ฯลฯ ) เกมนี้เป็นเกมพีซีมาตรฐาน (ไม่ใช่เบราว์เซอร์) และจะใช้ไคลเอนต์เซิร์ฟเวอร์ สถาปัตยกรรม. ฉันยังใหม่กับการใช้ฐานข้อมูลและได้ทำการวิจัยบางอย่างในช่วงไม่กี่วันที่ผ่านมาเมื่อฉันได้พบกับการอภิปรายที่ร้อนแรง: RDBMS vs NoSQL ขณะนี้ฉันกำลังโน้มเอียงไปทาง NoSQL แต่หลังจากอ่านเกี่ยวกับการใช้งานสำหรับแต่ละ (RDBMS และ NoSQL) ฉันก็อยากจะใช้ทั้งสองอย่าง ฉันรู้ว่ามันอาจดูแปลก แต่ขอให้ฉันอธิบายสถานการณ์ของฉัน: ทีมของฉันมีแพ็คเกจเว็บโฮสติ้งที่ใช้ร่วมกันซึ่งมีพื้นที่เก็บข้อมูลและแบนด์วิดธ์ mySQL ไม่ จำกัด ซึ่งเป็นข้อแม้เดียวที่เราสามารถเปิดได้ 25 การเชื่อมต่อในครั้งเดียว (กฎการโฮสต์ที่ใช้ร่วมกัน) ฉันตั้งใจจะใช้สิ่งนี้กับเว็บไซต์ของฉัน (เป็นการใช้งานทั่วไปอย่างไม่ต้องสงสัย) เพื่อโพสต์การอัปเดตข่าวสนับสนุนคุณลักษณะของชุมชน (เช่นความคิดเห็นการอัปโหลดภาพหน้าปกของแฟน ๆ ฯลฯ ) และอื่น ๆ นั่นคือทั้งหมดที่ดีและดี - แต่! นี่คือสิ่งที่น่าสนใจ ... ฉันต้องการแสดงข้อมูลเดียวกันนี้ที่โพสต์บนเว็บไซต์ของฉันในเกม นี่หมายถึงการใช้ mySQL สำหรับทั้งเว็บไซต์และเกมของฉัน นอกจากโพสต์ข่าวและสิ่งที่ชอบฉันวางแผนที่จะใช้มันในเกมสำหรับสิ่งต่าง ๆ เช่นการแชทและรายชื่อเซิร์ฟเวอร์ …

2
ประสิทธิภาพด้านเซิร์ฟเวอร์ FPS ของผู้เล่นหลายคน
สิ่งนี้เกี่ยวข้องกับประสิทธิภาพ MMOยกเว้นคำถามนั้นเกี่ยวกับแบนด์วิดท์ นี่เป็นเรื่องของ cpu load ฉันรวบรวม FPS ง่าย ๆ โดยใช้ node.js และ webGL มันง่ายมาก ๆ เหมือนโคลน BuddyMaze ของ MIDI Maze เกิดขึ้นน้อยมากทุกคนเคลื่อนที่ในสองมิติ (ไม่มีความสูง) ยิงขีปนาวุธง่าย ๆ แล้ววิ่งเข้าไปในกำแพง ตอนนี้ถ้าฉันทำการเชื่อมต่อหลายครั้งไปยังเซิร์ฟเวอร์ที่ผู้เล่นทุกคนถ่ายภาพอย่างรวดเร็วในขณะที่หมุนเป็นวงกลมฉันสามารถรับผู้เล่นได้ประมาณ 15 - 20 คนในเกมก่อนที่เซิร์ฟเวอร์จะคายแกนและช้าลง และนี่คือเมื่อทำงานที่ 30 fps บนเซิร์ฟเวอร์ ที่ 10 fps ฉันได้รับการเชื่อมต่อประมาณ 25 - 30 นี่เป็นสิ่งที่ไม่ดีนักเนื่องจากเกมจะมีอะไรอีกมากมายที่ต้องทำในไม่ช้าและฉันจะต้องเพิ่มผู้เล่นให้มากขึ้นเพื่อให้เป็นไปได้ พี่ชายของฉันเพิ่งชี้ให้เห็นสถิติบางอย่างเกี่ยวกับเซิร์ฟเวอร์ TF2 ของเพื่อนร่วมงานของเขา เซิร์ฟเวอร์ของเขามีสเปคต่ำกว่าของเรา แต่มันรัน TF2 ซึ่งเป็นเกมที่ซับซ้อนมากขึ้นอย่างมากที่ 500 …

3
วิธีไคลเอนต์ / เกมเซิร์ฟเวอร์โดยใช้ Google App Engine (มองหาบทช่วยสอน)
(หมายเหตุ: นี่เป็นคำถามที่ซ้ำกันที่ฉันถามเกี่ยวกับ SO โดยลืมไปชั่วคราวเกี่ยวกับ GameDev <วางหูด้วยความอับอาย> เมื่อตอบแล้วฉันจะลิงค์กลับไปที่อื่น) ฉันกำลังพยายามทำเกมไคลเอนต์ / เซิร์ฟเวอร์ครั้งแรกโดยใช้ Google Apps Engine เป็นแบ็คเอนด์ของฉัน (ข้อกำหนดเฉพาะ) ฉันได้ทำแบบฝึกหัด (Java) แล้ว แต่ทั้งหมดดูเหมือนว่าจะเป็นเบราว์เซอร์สูง โดยทั่วไปฉันต้องการแอป (มือถือไม่ใช่เรื่องสำคัญ) ไปที่: อนุญาตให้ผู้ใช้สร้างบัญชีเกม (ไม่ใช่บัญชี Google!) เข้าสู่ระบบด้วยบัญชีนั้น กดปุ่ม "MARCO" เพื่อส่งคำขอระบุบัญชีไปยังเซิร์ฟเวอร์ รับการตอบสนอง "POLO" จากเซิร์ฟเวอร์ ในฐานะข้อมูล (เช่นวัตถุ JSON, XML-DOM หรือที่คล้ายกัน) ไม่เหมือนกับเว็บเพจ ทุกคนสามารถชี้ให้ฉันเป็นโครงการสอน / ตัวอย่างที่ดี / การอ่านอย่างละเอียดเพื่อช่วยให้ฉันประสบความสำเร็จได้หรือไม่? ฉันค่อนข้างมั่นใจว่าเมื่อฉันทำงานได้ฉันสามารถทำส่วนที่เหลือทั้งหมด - แต่ฉันมีปัญหา "ติดอยู่ที่ประตูเริ่มต้น" ไม่สามารถทำงานขั้นพื้นฐานการลงชื่อเข้าใช้บัญชีและ การแลกเปลี่ยนข้อมูลที่ไม่ใช่ HTML …

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

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

2
เอ็นจิ้นสำหรับเกมบนเว็บในที่สุดควรเริ่มเป็นบริการเว็บหรือไม่?
ฉันเพิ่งตัดสินใจเริ่มเขียนโปรแกรมสำหรับเกมไพ่ ฉันไม่ใช่ผู้เล่น "ไพ่" ที่ยิ่งใหญ่ แต่มีเพื่อนแนะนำฉันให้รู้จักกับเกมนี้ (มันเป็นการหมุนเกมเดนมาร์ก) และฉันตกหลุมรัก ฉันต้องการพัฒนาเกมใน 3 ส่วน: เครื่องมือพื้นฐานจัดการไพ่ / สำรับ / เกม ฯลฯ ส่วนต่อประสานผู้ใช้ (ในรูปแบบของมือถือ / เดสก์ท็อปเว็บแอพ) ปัญญาประดิษฐ์ที่มีกลยุทธ์ / ปัญหาต่าง ๆ เป็นต้น นี่เป็นโครงการที่แตกต่างกันมากในใจของฉัน ... และฉันกำลังดิ้นรนกับการเห็นว่าพวกเขาจะเข้าด้วยกันในระยะยาวอย่างไร ตอนแรกฉันไม่ต้องการแม้แต่จะ "เล่น" เกมโดยใช้เครื่องมือ เครื่องยนต์จะถูกทดสอบเป็นหลักโดยการทดสอบตามหน่วย การทดสอบการเล่นจะไม่เริ่มจนกว่าจะมีลูกค้า ดังนั้นจึงมีบางอย่างของความสัมพันธ์ระหว่างลูกค้ากับเซิร์ฟเวอร์ที่นี่ เครื่องยนต์เป็นตัวต่อชิ้นใหญ่มาก สิ่งที่ฉันอยากรู้คือ: คุณจะพัฒนา "API สาธารณะ" สำหรับเครื่องมือนี้อย่างไร? ฉันคิดว่าเอ็นจิ้นอาจเป็นบริการบนเว็บที่ธรรมดามากซึ่งส่งคืนสถานะผ่านเคียวรีไปยัง RESTful API แต่ฉันกังวลว่าการพัฒนาเอ็นจิ้นเองเนื่องจากเว็บแอพอาจนำไปสู่การตัดสินใจเขียนโปรแกรมที่ไม่ดี (ตัวอย่างเช่นถ้าฉันเลือก MVC micro-framework API นี้จะไม่มีมุมมองจริง ๆ …

2
สถาปัตยกรรมเซิร์ฟเวอร์ที่ดีที่สุดสำหรับเกมเรียลไทม์คืออะไร
ฉันกำลังพัฒนาเกมแบบเรียลไทม์ซึ่งควรมีผู้เล่นหลายพันคนในแบบเรียลไทม์ (FPS เช่นความล่าช้าสูงสุด 1 วินาที) อะไรจะเป็นโครงสร้างพื้นฐานที่ดีที่สุดสำหรับสิ่งนี้ ความคิดของฉันคือการใช้ 2 เซิร์ฟเวอร์คลัสเตอร์ - หนึ่งสำหรับเซิร์ฟเวอร์สิ้นสุด (ด้านการคำนวณทั้งหมด) และอีกหนึ่งสำหรับปลายฐานข้อมูลที่ load balancer เป็น "รับผิดชอบ" สำหรับแต่ละคลัสเตอร์ เซิร์ฟเวอร์หลักหนึ่งตัวจะได้รับการร้องขอจากผู้ใช้และส่งที่อยู่ IP ของเซิร์ฟเวอร์ที่เกี่ยวข้องที่ผู้ใช้สามารถทำงานได้ คลัสเตอร์ฐานข้อมูลจะใช้การจำลองแบบฐานข้อมูลเพื่อความสอดคล้องระหว่างฐานข้อมูล ควรมีตัวโหลดบาลานซ์เชิงภูมิศาสตร์ด้วยดังนั้นจึงจะกำหนดตัวโหลดบาลานซ์ระดับภูมิภาคให้กับผู้ใช้แต่ละรายเพื่อการตอบสนองที่ดีที่สุด ฉันใช้. NET + MSSQL สำหรับเกม ขอบคุณ!

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

3
เซิร์ฟเวอร์เกมสำหรับเกมกระดานเปิดใช้ Android / iOS
ขณะนี้ฉันกำลังเขียนโปรแกรมเกม iPhone และฉันต้องการสร้างโหมดผู้เล่นหลายคนออนไลน์ ในอนาคตแอพนี้จะเป็นพอร์ตไปยังอุปกรณ์ Android ดังนั้นฉันสงสัยว่าจะสร้างเซิร์ฟเวอร์เกมได้อย่างไร? ก่อนอื่นเลยฉันควรเลือกภาษาใด วิธีการทำให้เซิร์ฟเวอร์สามารถสื่อสารทั้งสองกับโปรแกรมที่เขียนในวัตถุประสงค์ -c และ Java? จากนั้นจะทำอย่างไรให้มีประสิทธิภาพ มันจะดีถ้าฉันเปิดซ็อกเก็ตโดยลูกค้า (จะมี 2)? ฉันควรส่งข้อมูลประเภทใดไปยังเซิร์ฟเวอร์ ให้กับลูกค้าหรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.