안드로이드 / iOS 턴제 보드 게임용 게임 서버


9

현재 iPhone 게임을 프로그래밍 중이며 온라인 멀티 플레이어 모드를 만들고 싶습니다. 앞으로이 앱은 Android 기기로 이식 될 예정이므로 게임 서버를 만드는 방법이 궁금합니다.

우선, 어떤 언어를 선택해야합니까? objective-c 및 Java로 작성된 프로그램과 서버가 통신 할 수 있도록하는 방법은 무엇입니까?

그렇다면 어떻게 효과적으로 할 수 있습니까? 클라이언트가 소켓을 열면 좋습니까 (2가 있습니까)? 어떤 종류의 정보를 서버에 보내야합니까? 고객에게?

답변:


7

나는 여기서 성전을 시작하려는 것은 아니지만 대부분의 인터넷 서비스 (플리커, 트위터, 페이스 북 등)는 직렬화 형식으로 RESTful 웹 서비스 및 JSON을 선호하여 SOAP를 삭제했습니다. 본질적으로 동일하지만 REST 서비스는 url 및 http 메소드를 사용하여 수행해야 할 작업을 정의합니다 (예 :

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

json.org에 설명 된 JSON도 XML보다 단순하며 전혀 관련이 없으므로 요청 당 몇 바이트를 절약 할 수 있습니다. 이전 예에 따라 JSON 표기법으로 기사를 설명하는 방법은 다음과 같습니다.

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

IOS에는 http://code.google.com/p/json-framework 를 언급하는 멋진 기사 http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/ 가 있습니다 . / 데이터 구문 분석 및 생성

턴 기반이기 때문에 서버의 http 세션을 사용하여 상태를 유지할 수 있으므로 서버에 대한 지속적인 소켓 연결을 유지할 필요가 없습니다. 모든 서버 측 언어가이를 지원합니다 (php, python, java 등).

이 아키텍처를 사용하면 투명한 방식으로 수평 확장 (서버 추가)이 가능합니다.


4

게임이 턴 기반이기 때문에 실시간 업데이트는 중요하지 않습니다. 가장 쉬운 방법은 이미 구축 된 서버를 사용하는 것입니다. 웹 서버를 사용합니다. 게임을 이식 할 가치가있는 모든 플랫폼은 웹 서버에있는 웹 서비스에 쉽게 액세스 할 수 있어야합니다.

거의 실시간으로 업데이트를 제공하려면 긴 폴링 을 검토하는 것이 좋습니다 . 해당 링크의 코드는 서버 측에서 가장 긴 폴링 구현을 제공합니다. 그러나 요점은 일단 리소스에 대한 요청이 있으면 요청 된 데이터가 사용 가능해질 때까지 서버가 차단 호출을 실행한다는 것입니다. 그런 다음 프로세스를 반복해서 반복하십시오.

어떤 데이터를 다시 보내야하는지에 대해서는 항상 클라이언트를 적대적인 것으로 취급하십시오. 클라이언트는 "턴 상태"가 무엇이든 보내야하며 서버가이를 확인한 다음 모든 것이 체크 아웃되면 새로운 "게임 상태"를 연결된 모든 클라이언트에게 다시 보냅니다.

-

SOAP 웹 서비스는 시작하기 가장 좋은 곳 ( link )이며 시작하기 쉬우 며 대부분의 웹 프레임 워크는이를 노출시키는 방법을 제공합니다. RESTful 서비스를 살펴볼 수도 있지만 일반적으로 소비자에게 약간의 직렬화 프로세스를 남겨 둡니다.

Android에서 SOAP 웹 서비스를 사용 하려면 여기를 참조하십시오 .


답변 해 주셔서 감사합니다. 그러나 아직 웹 서비스에 데이터를 보내는 방법을 이해하지 못합니까? 사용자 입력을 직렬화하는 방법 (여기서 8 * 8 보드에서 이동 : 예 : 플레이어 1을 [0,0]에서 [1,1]로)과 게임 상태를 직렬화하는 방법은 무엇입니까?
Cyril

내가 추가 한 두 개의 링크를 확인하십시오. SOAP 웹 서비스를 시작하는 것이 가장 쉬운 방법 일 것입니다.
Nate

Android 및 iOS의 경우 긴 폴링을 사용할 필요가 없습니다. Apple Push Notifications 또는 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.