직접 P2P 통신과 relay 통신의 성능 차이

클라이언트간 P2P 통신의 개요 에서 설명하듯이, 호스트간 peer-to-peer 통신에서는 직접 P2P 통신을 하는 경우와 relay 통신을 하는 경우가 존재하게 됩니다.

일반적으로 P2P 통신을 하는 경우에 비해 relay 통신을 하는 경우가 레이턴시가 두배 이상 큽니다. 특히 서버가 먼 거리에 있는 경우 (예를 들어 서버가 3000 킬로미터 이상 떨어져 있는 경우) 그 격차는 더욱 커지게 됩니다.

따라서 필요한 경우 다음과 같은 고려를 해보시는 것을 권장합니다.

  • relay 통신을 하는 경우에 한해서 P2P 메시징 총량(가령 RMI 호출 횟수)를 줄이기: Proud.CNetClient.GetPeerInfo 를 통해 RMI를 호출받을 타 클라이언트가 자신과 직접 P2P 통신을 하는 중인지 여부를 알 수 있습니다. 예를 들어 만약 relay 통신을 하는 것이라면 자신의 캐릭터 위치를 초당 8번씩 전송하는 RMI 호출의 횟수를 초당 4번으로 줄이는 방법이 있겠습니다.

하지만 relay통신이 가진 장점도 있습니다: P2P그룹의 멤버 갯수가 굉장히 많은 경우 클라이언트가 P2P 그룹을 상대로 RMI를 던지면 매우 많은 업로드 양이 발생합니다. 이에 대한 해결법에 대해서는 Proud.RmiContext.m_maxDirectP2PMulticastCount 설명 및 최종 메시지만 송출하기 를 참고하십시오.