한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › L1 클라이언트 게임 프로세스

시계 동기화 오차 Clock sync error

원인 ID cg-clock · 주 담당 게임개발팀·클라이언트 개발

그림과 실험이 있는 원본 카드로 열기 →

클라이언트가 추정한 서버 시각이 틀리면 보간 시점과 쿨타임 판정이 어긋납니다.

왜 접속할 때 한 번만 서버 시간을 맞추고 핑이 변해도 그대로 둠 → 그러면 보간할 시점·쿨타임 끝나는 시각이 서버와 어긋남 → 화면에서는 상대가 가끔 멈칫, 쿨타임이 끝났는데 스킬이 거절됨

증상
뚝뚝 끊김, 씹힘·롤백
요인
지연
누가 겪나
나만
언제
오래 켜 둘수록, 가끔 무작위로
담당
주 담당 게임개발팀·클라이언트 개발
게임개발팀 할 일
주기적으로 시간 동기화(왕복 시간 측정 후 보정), 급하게 바꾸지 말고 서서히 맞추기, 경과 시간은 PC 시각 대신 단조 시계(monotonic clock)로 재기.
그래프에서는
서서히 오름 · 추정 서버 시각의 오차
확인할 곳
클라이언트가 추정한 서버 시각과 서버가 패킷에 담아 보낸 서버 시각(틱 번호)의 차이를 주기적으로 기록
이러면 맞음
오차가 접속 뒤 시간이 지날수록 커지거나 PC 시계가 맞춰지는 순간 한 번에 튀고, 그 무렵 스킬 거절·멈칫 제보가 늘어남
이러면 아님
오차가 작게 유지되는데 스킬이 거절되면 서버 판정·지연 쪽
확인 수단
게임 서버·클라이언트의 로그·지표가 필요
더 알아보기
경과 시간을 PC의 날짜·시각(wall clock)으로 재면, 윈도우가 인터넷 시간에 맞춰 시계를 고치거나 사용자가 시계를 바꾸는 순간 게임 시각이 튑니다. 경과 시간은 되돌아가지 않는 단조 시계(monotonic clock, Stopwatch 등)로 재야 합니다.

출처

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    요청·응답의 네 시각으로 왕복 지연과 시계 오차를 계산하는 방식
  2. Acquiring high-resolution time stamps Microsoft
    QueryPerformanceCounter(Stopwatch가 사용)는 외부 시각과 동기화되지 않는 경과 시간용 시계, UTC 시각이 필요할 때만 시스템 시각 사용
  3. Time synchronization (Netcode for Entities 6.5) Unity
    왕복 시간으로 서버 시각을 추정하고 시각을 크게 바꾸지 않고 진행 속도를 조금씩 조정해 맞춤

함께 보면 좋은 원인

같은 층: L1 클라이언트 게임 프로세스

같은 증상(뚝뚝 끊김)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기