21.Super Peer(수퍼피어 혹은 호스트) 중심의 P2P 네트워킹

Edit

소규모 멀티플레이 온라인 게임(MO 혹은 캐주얼) 게임에서 Peer간 통신을 하는 방법 중 하나로, P2P 그룹의 멤버 중 하나가 게임 플레이를 위한 메시지 송수신을 모두 담당하는 방식이 있습니다. 이러한 방식을 Super Peer(수퍼피어 혹은 호스트) 중심의 P2P 네트워킹이라고 부르기도 합니다.

Super Peer(수퍼피어 혹은 호스트) 중심의 P2P 네트워킹 방식에서는, 게임 플레이를 진행하는 동안 각 peer는 보내야 할 메시지를 P2P 그룹의 모든 멤버에게 직접 보내지 않습니다. 대신 그것들은 지정된 1개의 super peer(또는 호스트라고 불리기도 합니다)에게 메시지를 보냅니다. 그러면 super peer는 받은 메시지를 P2P 그룹에 있는 다른 모든 멤버들에게 직접 보냅니다.

그림 21-1수퍼 피어의 예

만일 P2P 그룹에 속한 클라이언트 중 하나(A)가 매우 좋은 성능의 인터넷 환경을 갖고 있고 다른 클라이언트들은 별로 좋지 않은 인터넷 환경을 갖고 있는 경우 클라이언트 A가 super peer 역할을 하면 효과적입니다. 이때 클라이언트 A에 걸리는 트래픽은 다른 클라이언트들 갯수만큼의 수신량이 걸리며, 다른 클라이언트 갯수의 제곱만큼의 송신량이 걸리게 됩니다.

하지만 P2P 그룹에 속한 클라이언트 중 어느 것도 높은 통신 속도를 갖추고 있지 않은 경우 게이밍 품질이 오히려 하락할 수 있습니다. 따라서 Super Peer(수퍼피어 혹은 호스트) 중심의 P2P 네트워킹 을 구현할 때는 super peer의 통신 품질을 고려해서 신중하게 super peer를 선택해야 합니다.

super peer를 선택하는 방법은 다음과 같습니다.

• 인터넷 공유기 뒤에 있지 않고 직접 인터넷 회선에 물려 있는 경우 수퍼 피어로의 자격이 상승합니다.

• 클라이언트의 송신 속도가 높을 수록 수퍼 피어로의 자격이 상승합니다.

• 클라이언트의 성능이 좋아서 초당 실행 프레임레이트가 높은 경우 수퍼피어로서의 자격이 상승합니다. 가령, 물리 시뮬레이션을 수퍼피어가 전담하는 게임 개발의 경우 이것이 중요해집니다. 자세한 것은 Proud.CNetClient.SetApplicationHint 도움말을 참고하십시오.

ProudNet은 이를 계산하는 기능이 있습니다. Proud.CNetServer.GetMostSuitableSuperPeerInGroupProud.CNetServer.GetSuitableSuperPeerRankListInGroup 를 참고하십시오.

21.1수퍼피어의 실행 성능 관련 고려 사항

수퍼피어를 쓰는 목적 중 하나는 서버에서 감당하기 힘든 연산량을 클라이언트 중 하나가 차출하여 시행하는 데 있습니다. 예를 들어 물리 엔진 연산을 해야 하며 그 연산 결과가 게임플레이에 직접 영향을 주는 게임플레이의 경우 수퍼피어에서 처리를 대행하는 것이 좋습니다.

그림 21-2괴혼의 굴려라 왕자님. 이 귀여운 분도 물리연산을 하는 게임 월드에서 놉니다.

ProudNet은 수퍼피어의 실행 성능을 판단하기 위해 frame rate를 씁니다. 이를 위해 다음과 같은 처리를 해야 합니다.

• 수퍼피어 선정 과정에서 Proud.CSuperPeerSelectionPolicy.m_frameRateWeight를 설정하거나 Proud.CSuperPeerSelectionPolicy.GetOrdinary()를 사용해야 합니다.

Proud.CNetClient.SetApplicationHint를 통해 앱에서 측정된 frame rate를 Proud.CNetClient에 전달해야 합니다.

21.2수퍼피어의 통신량 관련 고려 사항

수퍼피어에서는 다른 피어에 비해 초당 송신량이 월등히 높습니다. 가정용 인터넷의 초당 송신량은 통상적으로 30KB~200KB를 넘지 못합니다. 게다가 이러한 초당 송신량은 기복이 큽니다. 따라서 수퍼피어가 가정용 인터넷 하의 컴퓨터로 선정될 경우 통신량에 대한 조절이 필요합니다.

이를 위해 11. 송신량 자동 조절 기능 (Throttling)을 참고하는 것을 권장합니다.