온라인 게임을 개발하다 보면 레이턴시를 측정하는 기능이 필요하기 마련입니다. ProudNet은 이를 위한 레이턴시 측정 기능을 제공합니다.
ProudNet은 StopWatch의 형태로 레이턴시 측정 기능을 제공합니다.
사용 가능하신 버전이라면 서버의 GetLastPing이나 GetRecentPing 대신 기존의 레이턴시 측정 함수들보다 더 정확한 이 기능을 이용해주셔야 됩니다. 사용가능한 버전에 대해서는 다음 링크의 릴리즈 노트를 참조부탁드립니다. http://guide.nettention.com/release_note
8.1레이턴시 측정 시작하기
StartRoundTripLatencyTest를 호출하면 레이턴시를 측정할 대상과 핑퐁 주고받기를 시작합니다.
일반적인 사용법은 아래 code를 참고 하십시오.
StartRoundTripLatencyTestParameter testParameter; testParameter.testDuration = 40 * 1000; // RoundTripLatencyTest 도중에 언제까지 StopRoundTripLatencyTest가 호출되기를 기다릴 것인지 지정하는 변수입니다. 단위는 밀리초입니다. 디폴트로 500ms를 가집니다. testParameter.pingIntervalMs = 400; // RoundTripLatencyTest 도중에 핑을 보내는 주기를 지정하는 변수이다. 단위는 밀리초입니다. 디폴트로 300ms를 가집니다. ErrorType startError = netClient->StartRoundTripLatencyTest(HostID_Server, testParameter); switch(startError) { case ErrorType_Ok: std::cout << "성공" << std::endl; break; case ErrorType_InvalidHostID: std::cout << "HostID가 자기 자신이거나, 연결된 피어가 아닌 경우" << std::endl; break; }
8.2레이턴시 측정 종료하기
앞서 지정한 testDuration 이전에 테스트를 중단하고자 한다면 StopRoundTripLatencyTest 함수를 호출합니다.
testDuration이 지날 때까지 StopRoundTripLatencyTest 호출을 안하면 자동적으로 측정이 중단됩니다.
일반적인 사용법은 아래 code를 참고 하십시오.
ErrorType stopError = StopRoundTripLatencyTest(HostID_Server); switch(stopError) { case ErrorType_Ok: std::cout << "성공" << std::endl; break; case ErrorType_InvalidHostID: std::cout << "연결된 피어가 아닌 경우" << std::endl; break; }
8.3측정된 레이턴시값 얻어오기
측정을 마친 후 원하는 시점에 레이턴시 값을 GetRoundTripLatency 함수로 얻어올 수 있습니다.
일반적인 사용법은 아래 code를 참고 하십시오.
RoundTripLatencyTestResult testResult; ErrorType getError = GetRoundTripLatency(HostID_Server, testResult); switch(getError) { case ErrorType_Ok: std::cout << "성공" << std::endl; std::cout << "측정 기간 동안의 핑퐁 평균 : " << testResult.latencyMs << ", 측정 기간 동안의 핑퐁 표준편차 : " << testResult.standardDeviationMs << ", 측정 기간 동안 실행된 핑퐁 횟수 : " << testResult.totalTestCount << std::endl; break; case ErrorType_InvalidHostID: std::cout << "연결된 피어가 아닌 경우" << std::endl; break; case ErrorType_ValueNotExist: std::cout << "핑퐁이 한번도 오가지 않은 경우" << std::endl; // 이 경우에 RoundTripLatencyTestResult의 totalTestCount가 0입니다. break; }