게임 호스트가 권한 또는 다른 멍청한 클라이언트 여야합니까?


15

한 플레이어가 호스트하고 다른 플레이어가 연결되는 네트워크 멀티 플레이어 게임을 설계 할 때 내가 알고있는 두 가지 전략이 있습니다.

  • 호스트 플레이어의 게임이 권위가되게하고 , 다른 모든 플레이어는 멍청한 클라이언트로서 현재 게임 상태를 따라 잡으려고합니다. 코드에는 현재 플레이어가 호스트인지 아닌지에 따라 많은 특별한 경우가 있어야합니다.
  • 다른 스레드에서 숨겨진 전용 서버를 실행 하여 호스트를 다른 모든 것처럼 벙어리 클라이언트로 만듭니다 . 전용 서버가 권한이되고 호스트는 로컬 호스트를 통해 다른 모든 사람과 마찬가지로 호스트에 연결됩니다.

이들 각각의 장단점은 무엇입니까? 어느 것이 가장 자주 사용됩니까 (또는 게임 유형 / 크기에 따라 다름)?


첫 번째로 설명하는 사례는 P2P 네트워킹의 한 형태 (권한있는 클라이언트 하나)와 일반적으로 훨씬 더 복잡하고 구현 및 유지 관리가 더 어려울 수 있습니다.
akaltar

답변:


13

바보 같은 클라이언트 접근 방식은 순수한 디자인 관점에서 가장 좋습니다. 호스트와 클라이언트간에 필요한 코드의 양을 크게 제한하고 서버를 비동기식으로 실행할 수 있습니다. 단점은 호스트 시스템에 추가 리소스가 필요하다는 것입니다. 그러나 항상 그랬습니다.


8

이 두 옵션 사이에서 DeadMG가 언급 한 이유로 벙어리 클라이언트 접근 방식이 가장 좋습니다.

모든 클라이언트에게 권한을 부여하는 또 다른 옵션이 있으며, 모든 피어가 동일한 코드를 공유한다는 바보 클라이언트의 장점이 있습니다. 다른 장점은 서버 간 지연이없는 사람이 없기 때문에 올바른 규칙을 설정하면 훨씬 더 공정 할 수 있다는 것입니다.

물론 게임 유형에 따라 구현하기가 다소 까다로울 수 있습니다. 귀하의 프로토콜은 아마도 일종의 소유권 체계를 사용하여 동료 간의 갈등을 해결해야합니다. 2 명의 동료가 동일한 게임 오브젝트의 소유권을 주장하는 충돌 만 남깁니다.

인터넷 검색 피어 2 피어 멀티 플레이어 프로토콜은이 방법에 대한 자세한 내용을 제공 할 수 있습니다.


1
gamedev.stackexchange.com/questions/3887/...는 여기에 몇 가지 추가 정보를 원하시면 :)입니다
michael.bartnett

흥미 롭군 그 포스트는 이것이 "대부분의 전략 타이틀"이 네트워킹을 구현하는 방법이라고 주장합니다. 이것이 사실입니까? 이것이 어떻게 예입니까? 커맨드 앤 컨커스타 크래프트가 작동합니까?
BlueRaja-대니 Pflughoeft

@BlueRaja, 이것이 Starcraft의 작동 방식입니다. 스타 크래프트에는 권한이 전혀 없습니다. 워크래프트 III와 스타 크래프트 II는 중앙 집중식 메시지 교환 모델, 지연 및 연결 끊김 처리 기능을 갖추고 있지만 기본적으로 각 클라이언트가 자체 게임 상태를 호스팅한다는 점에서 동일합니다.
Rotsor

이 네트워킹 모델의 다른 장점은 최소한의 동기화 트래픽으로 일관된 대규모 공유 세계 상태를 지원할 수 있다는 것입니다.
Rotsor

이 모델의 가장 큰 단점은 "맵 해킹"에 내재 된 취약점으로, 플레이어가 일반적으로 볼 수없는 일부 게임 상태 데이터를 나타냅니다.
Rotsor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.