เซิร์ฟเวอร์เกมสำหรับเกมกระดานเปิดใช้ Android / iOS


9

ขณะนี้ฉันกำลังเขียนโปรแกรมเกม iPhone และฉันต้องการสร้างโหมดผู้เล่นหลายคนออนไลน์ ในอนาคตแอพนี้จะเป็นพอร์ตไปยังอุปกรณ์ Android ดังนั้นฉันสงสัยว่าจะสร้างเซิร์ฟเวอร์เกมได้อย่างไร?

ก่อนอื่นเลยฉันควรเลือกภาษาใด วิธีการทำให้เซิร์ฟเวอร์สามารถสื่อสารทั้งสองกับโปรแกรมที่เขียนในวัตถุประสงค์ -c และ Java?

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

คำตอบ:


7

ฉันไม่ได้ตั้งใจที่จะเริ่มสงครามศักดิ์สิทธิ์ที่นี่ แต่บริการอินเทอร์เน็ตส่วนใหญ่ (flickr, twitter, facebook และอื่น ๆ ) ได้รับการวางสบู่ในความโปรดปรานของ webservices สงบและ JSON เป็นรูปแบบต่อเนื่อง แม้ว่าโดยพื้นฐานแล้วจะเหมือนกันบริการ REST จะใช้วิธี url และ http เพื่อกำหนดสิ่งที่ควรทำตัวอย่างเช่น

GET /articles - list all articles
POST /articles - add a new article
PUT /articles/123 - update article 123 with new data

JSON - อธิบายไว้ใน json.org - นั้นง่ายกว่า XML และอาจจะไม่เกี่ยวข้องมากนักซึ่งจะช่วยให้คุณประหยัดได้ไม่กี่ไบต์ต่อคำขอ ต่อไปนี้เป็นตัวอย่างก่อนหน้านี่เป็นวิธีอธิบายบทความในสัญกรณ์ JSON:

{ 
 "id": 123,
 "author": "Cyril",
 "content": "Hello, this is an article",
 "tags": [ "gamedev", "webservices", "multiplayer" ] 
}

สำหรับ IOS มีบทความที่ดีนี้ที่http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/ซึ่งกล่าวถึง http://code.google.com/p/json-framework /สำหรับการแยกวิเคราะห์และสร้างข้อมูล

คุณสามารถพึ่งพาเซสชัน HTTP บนเซิร์ฟเวอร์เพื่อรักษาสถานะไว้ดังนั้นจึงไม่จำเป็นต้องเชื่อมต่อซ็อกเก็ตถาวรกับเซิร์ฟเวอร์ ภาษาฝั่งเซิร์ฟเวอร์รองรับสิ่งนี้ (php, python, java, etc)

สถาปัตยกรรมนี้ช่วยให้คุณสามารถขยายแนวนอน (เพิ่มเซิร์ฟเวอร์มากขึ้น) อย่างโปร่งใส


4

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

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

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

-

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

สำหรับการบริโภค SOAP บริการเว็บบน Android ของฉันมองที่นี่


สวัสดีและขอบคุณสำหรับคำตอบของคุณ แต่ฉันยังไม่เข้าใจวิธีการส่งข้อมูลไปยังบริการเว็บของฉัน วิธีทำให้เป็นอนุกรมการป้อนข้อมูลของผู้ใช้ (ที่นี่ย้ายใน 8 * 8 คณะกรรมการของฉันเช่น: ผู้เล่น 1 จาก [0,0] ถึง [1,1]) แล้ววิธีการเป็นอันดับเกมรัฐ?
Cyril

ตรวจสอบลิงก์ทั้งสองที่ฉันเพิ่ม พวกเขาควรให้คุณเริ่มต้นกับบริการเว็บ SOAP ซึ่งอาจเป็นวิธีที่ง่ายที่สุดในการเริ่มต้น
เนท

สำหรับ Android และ iOS คุณไม่จำเป็นต้องใช้การทำโพลแบบยาว การแจ้งเตือน Apple Push หรือ Google Cloud Messaging จะช่วยให้คุณสามารถส่งข้อมูลจากเซิร์ฟเวอร์ไปยังอุปกรณ์ของคุณ
Matt

2

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

FICS ทำงานอย่างนั้นและให้บริการผู้เล่นหมากรุกหลายพันคนเป็นเวลาหลายปี IRC ก็ใช้วิธีนี้เช่นกัน (ดู RFC 1459)


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