태그 보관물: architecture

architecture

멀티 플레이어 실시간 안드로이드 게임을위한 최고의 솔루션 이 질문은 주제에 맞지 않습니다 .

Android (2-8 명) 용 멀티 플레이어 실시간 게임을 만들 계획이며 멀티 플레이어 조직에 가장 적합한 솔루션은 다음과 같습니다.

  1. PC에서 서버, 모바일에서 클라이언트로, 모든 통신은 서버를 통해 이루어집니다 (ClientA-> PC SERVER-> 모든 클라이언트)

  2. 블루투스를 사용하십시오. 아직 사용하지 않았으며 블루투스에서 멀티 플레이어를 만드는 것이 어렵다는 것을 모르겠습니다.

  3. 장치 중 하나에 서버를 만들고 다른 장치를 연결하십시오 (네트워크를 통해 연결하지만 NAT를 통한 장치의 문제를 해결하기 어렵다는 것을 모르겠습니다)?

  4. 다른 해결책?



답변

기권; 나는 자바와 안드로이드 플랫폼으로 많은 것을하지 않았다 .

그러나 Windows 플랫폼과 함께 Windows 모바일 플랫폼에서 ‘.net’언어에 대한 더 광범위한 경험은 Bluetooth 또는 네트워크 데이터 연결을 만들고 유지하는 데 필요한 모든 코드의 75-90 %가 유지된다는 것입니다. OS에 액세스하거나 하드웨어에 액세스해야하는 라이브러리에서 지원됩니다.

지금까지 이것은 Android에서도 마찬가지입니다 .OS는 블루투스 또는 인터넷을 통해 데이터 연결을 만드는 방법을 노출하고 각 하드웨어를 활성화 / 비활성화합니다.

구현하는 데 가장 비용이 적게 들기 때문에 (서버 없음) Bluetooth가 선호되는 연결 방법이라고 생각합니다. 그리고 더 많은 지역 모임 / 게임을 허용하십시오. 블루투스는 사용하기가 상당히 쉽습니다. 연결하려는 장치를 알고 있으면 일반 네트워크 소켓과 유사하게 작동합니다.

Bluetooth v2.0 / v2.1이 현재 큰 데이터로드를 지원할 수 없다는 점에서 다른 것은 정확합니다. 이것은 v3.0 이상의 최종 스프레드에 따라 변경됩니다. 이 한계를 극복하는 방법이 있습니다.

지금은 간단한 개념이지만 복잡한 솔루션이 있지만 시도해 볼 수 있습니다. 나는 그것을 잠시 동안 사용 해 왔으며, 그것은 피어 투 피어와 비슷하지만 모든 장치에서 동시에 게임을 호스팅하는 것과 관련이 있습니다. 이런 식으로 연결이 일시적으로 끊어 지거나 느려지거나 어떤 이유로 플레이어가 드롭 되더라도 다른 플레이어는 영향을받지 않습니다. 이를 통해 다른 플레이어 나 자신의 게임에 지장을주지 않으면 서 진행중인 게임에 다시 참여할 수 있습니다.

CON : 각 플레이어는 실제로 게임의 고유 한 인스턴스를 재생하는 데, 다른 플레이어와 연결되어 게임이 서로 너무 동기화되지 않도록합니다.

단점 : 지원 코드 광범위하고 복잡하며 달성하려는 목표에 따라 머리를 감쌀 수 없습니다.

PRO : 중앙 서버 나 장치가 필요하지 않습니다! $$$ 유지가 필요하지 않습니다.

PRO : 많은 양의 데이터 교환은 플레이어가 다시 참가하거나 게임이 초기화 된 경우에만 발생합니다. -모든 게임이 생성되도록 보장하고 모든 플레이어가 동일한 방식으로 진행함으로써이를 줄일 수 있습니다. 네트워크 사용량이 많아서 발생하는 에너지 소비를 잠재적으로 줄입니다.

PRO : 장치는 다른 플레이어 없이도 게임을 계속하는 데 필요한 모든 데이터를 이미 가지고 있기 때문에 데이터의 시간이 덜 민감 해집니다. 플레이어 그룹이 아닌 개별 사용자의 실제 게임 경험에 더 집중할 수 있습니다 .

이를 활용하는 완전한 게임 엔진을 구현할 시간이 부족했습니다. 내가 만든 게임은 Monopoly 및 Uno와 비슷한 게임을 다시 작성하는 것으로 제한되어있어 매우 잘 작동하는 것 같습니다.

가장 쉬운 방법은 우노를 모방 한 것입니다. 나는 플레이어가 모든 게임에서 이길 수 있도록 플레이어가이긴 후에 패자의 갑판을 쌓았습니다. 95 % 이상이 다른 사람들과 똑같은 게임을하고 있지 않다는 것을 알 수 없었습니다.

나는 Master of Orion II와 비슷한 게임을 만들기 시작했지만 게임 자체는 나 자신이 수행하는 것이 조금 컸습니다.


답변

그것은 게임에 크게 의존하지만, 일부 친구와 나는 몇 달 전에 만 같은 문제에 대해 생각하고 있었고 여기에 우리가 결정한 것이 있습니다. 나는 또 다른 장단점에 있습니다.

컴퓨터 기반 서버

찬성

  • 시도와 진실
  • 확장 가능

단점

  • 여러 게임을 동시에 호스팅 할 수있는 “멀티 서버”를 작성해야합니다. 이것은 아마도 안드로이드 폰과 약간 다른 기술을 사용할 것입니다. 여전히 자바를 사용할 수 있지만 여전히 안드로이드 패키지를 사용할 수 있습니까?
  • 실행 및 유지 관리 비용이 많이들 수 있음
  • 여러 가지 이유로 인해 언젠가는 풀다운 가능성이 있습니다. 게임을 구매 한 후 몇 달 동안 서버가 다운되면 팬이 만족하지 않을 수 있습니다.

그들 중 하나와 함께 피어 투 피어

찬성

  • 친구가 원할 때 다른 친구와 합류 할 수있는 애드혹 서버
  • 귀하의 운영 비용이 거의 또는 전혀 없음
  • 서버 코드는 클라이언트 코드와 혼합되어 별도의 서버 응용 프로그램을 작성할 필요가 없습니다.

단점

  • 간단한 중앙 집중식 피어 파인더를 작성해야합니다. (저는 수백 가지 쉬운 라인으로 PHP + MySQL에서 광산을 만들었습니다)
  • 서버가 전화기에서 실행 중입니다. 전화가 느려질 수 있습니다. 모든 대상 전화가 게임을 호스팅 할 수 있습니까?
  • 서버 폰 연결이 끊어지면 어떻게됩니까?
  • 해커가 침입하기 쉬운 클라이언트 서버보다

블루투스의 경우 위의 피어 투 피어 방법과 비슷할 것으로 예상합니다. 또한 NAT에 문제가 있다고 생각하지 않습니다.

편집 : 그것은 또한 당신의 경험에 크게 의존합니다. 네트워킹을 먼저 시작하기 위해 상대적으로 작은 클라이언트 / 서버 게임을 작성하는 것으로 시작했습니다. 처음에는 잘못되기 쉬운 주제입니다. 나는 세 번째 시도에서 내 권리를 얻었다. 알려진 패턴을 따르고 스스로 무언가를 만들려고하지 마십시오.


답변

고려해야 할 가장 큰 고려 사항 중 하나는 안정성입니다. 전화는 매우 신뢰할 수 없습니다. 실제로, 당신은 아마 8 플레이어 게임에서 누군가가 끊을 가능성이 있다고 가정해야합니다 (수신 전화, 수신 불량, 플레이어 종료 …)

이를 염두에두고 연결이 끊어진 사용자의 영향을 최소화해야합니다. 두 번째 옵션에서는 본질적으로 전화를 서버로 만들었습니다. 그 전화가 MIA가되면 게임은 모든 플레이어에게 효과적으로 끝납니다.

John은 전통적인 클라이언트 <-> 서버 아키텍처의 장단점을 다루었습니다. 이것은 아마도 모든 사람에게 안정적인 멀티 플레이어 경험을 제공하는 가장 탄력적 인 방법 일 것입니다.

잠금 단계 시뮬레이션 라인을 따라 기술을 고려할 수도 있습니다. 이것은 순수 피어 투 피어 방식으로 구현 될 수 있습니다. 일반적인 아이디어는 모든 클라이언트가 모든 시뮬레이션 단계마다 업데이트 (일련의 명령 또는 그 부족)를 보내야한다는 것입니다. 후속 시뮬레이션 단계에서, 각 플레이어의 명령이 게임 로직에 적용됩니다. 많은 RTS 게임은 이런 종류의 네트워킹 체계를 사용합니다.

이 기술은 구현하기 어려울 수 있으며 디버깅하기가 매우 어려울 수 있습니다. 보다 전통적인 클라이언트-서버 아키텍처를 사용하는 것보다 확실히 어렵습니다. 또한 플레이어의 입력과 게임이 입력에 응답 할 때의 지연을 의미합니다. 그러나 한 명의 플레이어가 이탈한다면 나머지 플레이어는 게임에서 그를 제외하고 계속할 수 있습니다. 또한 다른 체계에 비해 네트워크 트래픽을 잠재적으로 줄일 수 있습니다.

이 기술에 대해 더 배우고 싶다면 주제에 관한 훌륭한 기사 부터 시작 하십시오. 그렇지 않으면 단일 전화가 멀티 플레이어 세션을 담당하는 네트워크 체계를 사용하지 말고 더 간단한 클라이언트 <-> 서버 아키텍처를 제안합니다.


답변