게임 호스트가 권한 또는 다른 멍청한 클라이언트 여야합니까? 알고있는 두 가지 전략이 있습니다. 호스트

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

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

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



답변

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


답변

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

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

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

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


답변