2011-03-25 8 views
5

Java의 멀티 플레이어 프로젝트에서 작업하고 있으며 대기 시간 측정 결과를 수집하는 방법을 세분화하려고합니다.측정 대기 시간

현재 나의 설정은 일정한 간격으로 서버가 타임 스탬프를 받아 반환 된 일괄 UDP 패킷을 보내어 대기 시간을 계산하고 기록하는 것입니다. 나는 샘플 수를 취한 다음 대기 시간을 얻기 위해 평균을 계산한다.

클라이언트 측에서 대기 시간을 조정하는 것이 합리적인 해결책으로 보입니까?

+0

모든 통신이 UDP를 사용하여 이루어진 것으로 가정합니다. – biziclop

+0

사실, 맞습니다. 덕분에 – TechyAdam

답변

3

게임 프로토콜에 사용되는 패킷의 타임 스탬프를 설정할 수도 있습니다. 따라서 통계를 통합하는 데 더 많은 데이터가 필요합니다. (이 방법은 추가 데이터 버스트로 인한 오버 헤드를 피하기 위해 유용합니다. 통계를 처리하기 위해 이미 교환 한 데이터를 사용했습니다)

다른 메트릭 (예 : 분산)을 사용할 수도 있습니다. 연결 품질을보다 정확하게 예측할 수 있습니다.

+0

안녕하세요, 저는이 아이디어가 마음에 들지만, 모든 패킷이 내가 추측하는 트래픽을 두 배로 늘리는 응답을 요구할 것이라고 생각합니다. – TechyAdam

+0

@TechyAdam : 수집하는 "타임 스탬프"가 많을수록 통계가 정확합니다. 물론 통계를 수집하기 위해 많은 양의 사용되지 않은 패킷을 보내는 것은 좋은 생각이 아닙니다. 예, 물론 패킷을 사용하면 즉각적인 응답이 유용 할 것입니다. 어쨌든 그것은 단지 클라이언트에게 보내진 ack 패킷 일 수 있습니다. 작은 차원에는 타임 스탬프, 패킷 시퀀스 번호 및 그와 같은 몇 가지 데이터 만 들어 있습니다. – Heisenbug

+0

@TechyAdam :하지만 당신에게 대답 할 때 UDP가 신뢰할 수 없기 때문에 이미 클라이언트에게 어떤 종류의 UDP ACK 데이터 그램을 보냈다 고 생각했습니다. 그래서 패킷이 목적지에 도달하기 전에 전송되었는지 확인해야합니다 . – Heisenbug

15

나가는 패킷에 클라이언트가 타임 스탬프를 보내고 응답에 원래 타임 스탬프가 보존됩니다. 이렇게하면 서버와 클라이언트 클록이 정확하게 동기화되지 않아서 발생하는 문제를 밟을 때 왕복 지연 시간을 계산할 수 있습니다.

+1

. 시간 동기화가 내 문제였다. 내 두 창문 OS 시계는 인터넷 시계와 동기화되었지만 몇 가지 이유로 그들은 약 3 초 정도 떨어져있어 편도 레이턴시를 찾지 못했습니다. 당신의 방식은 매력처럼 작동합니다. –

0

프로젝트를 아직 시작하지 않은 경우 KryoNet과 같은 네트워킹 프레임 워크를 사용하십시오.이 프레임 워크는 RMI와 효율적인 직렬화가 있으며 UDP를 사용하여 자동으로 ping 요청을 전송합니다. 핑 시간 값을 쉽게 얻을 수 있습니다.

0

왕복 지연 시간을 측정하는 경우 시계 드리프트, HW 클록 및 OS API의 정밀도와 같은 요소가 측정에 영향을 미칩니다. 하드웨어에 돈을 들이지 않고 얻을 수있는 가장 가까운 것은 RDTSC 명령어를 사용하는 것입니다. 그러나 RDTSC는 자체 문제없이 진행되지 않습니다. 어떻게 호출하는지주의해야합니다.