2010-03-04 1 views
23

나는 Android 개발자이며 보드 게임을 일부 만들었습니다. 이제 보드 게임 멀티 플레이어를 만들고 싶습니다. 내 웹 서비스를 만들고 호스트하고 싶지 않아 P2P에 대해 생각했습니다.Android P2P 멀티 플레이 게임 (with a) XMPP/Google 토크 b) JXTA peerdroid c) 다른 방법)

내가 처음 발견 한 것은 XMPP 프로토콜이지만 실제 P2P는 아니지만 기존 Google 토크 서비스를 사용할 수 있다면 갈 준비가되어 있습니다. Google 토크 클라이언트의 정상적인 작동을 방해하지 않고 기존 Google 계정을 사용하면서 가능합니까?

그렇다면 실제 P2P 솔루션 인 JXTA에 대해 들었고 이미 J2ME에서 Android (http://code.google.com/p/peerdroid/)로 이식되었습니다. (내가 가끔처럼)

아마 내가 난 그냥 보드 게임에 대한 간단한 P2P를 할 수있는 쉬운 방법을 알고 싶어

여기 일을 overcomplexing하고있다.

귀하의 의견은 모두 환영합니다! 미리 감사드립니다.

+1

한 번에 비교적 적은 양의 플레이어가 있다고 가정하고 있습니다. 특히 하나의 휴대 전화가 다른 플레이어와 서버로 작동 할 수 있어야합니다. 특히 보드 게임이 턴 기반이므로 네트워크 트래픽이 최소화됩니다. 그러나 여전히 다른 플레이어를 발견 할 수있는 중앙 집중식 형태가 필요합니다. (예 : 개인적으로 필자는이 경우 전혀 P2P를 사용하지 않을 것입니다.) –

+0

사용자의 요구 사항을 잘 모르겠지만 사람들이 서로 가까이있을 것으로 예상되는 경우 Bump와 같은 것을 사용하여 데이터 연결을 처리 할 수 ​​있습니다. .. – Travis

답변

3

XMMP를 사용하는 것이 가능해야합니다. igniterealtime에서 smack을 찾으십시오. 그들은 게임 상태에서 변경 사항을 전송하는 데 사용할 수있는 jabber 확장 패킷을 빌드하는 데 도움이되는 멋지고 활동적인 Java API를 가지고 있습니다.

동일한 계정으로 동시에 두 개의 Google 토크 클라이언트를 사용하는 것이 어려울 수 있다고 생각합니다. 하지만 게임에서 직접 나와 함께 게임을 즐기기 위해 모든 친구를 초대 할 수 있기 때문에 좋을 것입니다. 이렇게하면 더 많은 사람들이 게임을 쉽게 할 수 있습니다.

+1

사실, 안드로이드 XMPP 라이브러리는 많은 돈을 벌고있다. :-) – Malax

+0

developer.android.com에서 xmpp 라이브러리를 찾을 수 없습니까? android에 사전 설치된 라이브러리에 대한 링크를 제공 할 수 있습니까? – Janusz

+0

AFAIK 안드로이드에는 xmpp 라이브러리가 없습니다! 그리고 gtalkservice가 android 1.0부터 제거되었습니다. – Kristof

3

Google 토크 서비스/연결을 기존의 것으로부터 사용할 수 없습니다. Janusz의 조언을 듣고 매매 라이브러리를 확인해야합니다. 이것이 최선의 방법입니다. 동일한 GTalk 로그인으로 다중 방해받지 않는 연결을 허용하려면 XMPP 주소의 리소스 구성 요소를 살펴보십시오. 이는 동일한 계정에 동시에 두 클라이언트에 로그인 할 수있게합니다. 게임을 효과적으로 다른 클라이언트로 만들 수 있습니다. More here : http://code.google.com/appengine/docs/java/xmpp/overview.html#JIDs_and_Resources

마지막으로 2.2에서는 장치 푸시 통신과 관련된 몇 가지 새로운 기능이 있지만 아직 살펴 보지 않았습니다. 2.2는 아직 널리 배포되지 않았으므로 제한된 용도로만 사용됩니다.

4

크리스토프, 질문에 대한 답변을 얻었습니까? 나는 최근에 멀티 플레이어 응용 프로그램을 개발해 왔지만 서버를 호스팅하기로 결정했습니다 (원래). 필자는 이제 선택의 여지를 재고하고 있지만 필자가 사용중인 라이브러리는 피어 투 피어 통신을 완벽하게 지원합니다. 기본 프로토콜은 Google Protobuf 위에 구축됩니다. 이것은 본질적으로 Prottyuf를 사용할 수있는 Netty 위에 구축 된 전이중 RPC 스택입니다. RPC protobuf 스택의 URL은 다음과 같습니다. http://code.google.com/p/protobuf-rpc-pro/

저자는 매우 유용했으며 몇 가지 버그를 발견했습니다. 필자도 안드로이드 폰에서이 라이브러리를 작동시키는 데 거의 문제가 없었지만 끔찍하게 "컴팩트"하지는 않습니다. 특별한 것은 없습니다. 단지 작지 않습니다. :) 지금까지는 통신을 동 기적으로 또는 비동기 적으로 처리하는 데 아무런 문제가 없었습니다. 따라서 게임을 "피어 투 피어 (peer to peer)"스타일로 옮기고 기존 게임/서버를 찾는 데 필요한 위치/등록 서버를 제공하면됩니다.

1

기본적으로 다중 사용자 게임이나 XMPP (재버) 위에 빌드 된 게임을 작성하려는 경우 XMPP의 pubsub 확장을 심각하게 고려해야합니다. HTTP와 반대되는 방식으로 서버에서 클라이언트로 데이터를 푸시하기 위해 설계되었습니다. HTTP에서 클라이언트는 새로운 데이터가 언제 푸시되는지 알 수 있도록 항상 서버에서 정보를 가져와야합니다.XMPP는 무언가가 발생하면 데이터를 클라이언트에 전달하도록 설계되었습니다. 서버 및 클라이언트에서 사용되는 리소스가 줄어 듭니다.

사용자 존재를 방해하므로 XMPP의 채팅 부분을 사용하면 안됩니다.

pubsub에서 클라이언트가 가입하는 트리의 노드 또는 하위 노드에 게시 된 새 데이터를 클라이언트가들을 수있는 노드 트리를 만들 수 있습니다. 따라서 어떤 클라이언트가 한 노드에 데이터를 게시하면 해당 노드 또는 모든 상위 노드에 가입 한 모든 클라이언트에게이 데이터에 대한 알림이 전송됩니다.

XMPP의 장점 중 하나는 확장이 가능하기 때문에 확장 프로그램을 사용하여 프로토콜을 확장 할 수 있다는 것입니다. 또한 사용자 권한 부여, 인증 및 암호화를 제공하며 직접 디버깅 할 필요가 없습니다.

pubsub를 지원하는 모든 XMPP 서버를 사용할 수도 있고 하나의 서버를 직접 호스트 할 수도 있습니다. 이 용도로 사용할 수있는 서버가 많이 있습니다. GTalk는 내가 본 마지막 PubSub에 대한 지원을하지 않습니다.

관련 문제