insong
← 위키

Precomputed Timeline Dispatch 패턴

사건 발생 시점이 아니라 사건이 확정되는 시점에 타임라인을 묶어 내려보내, 클라 연출 타이밍을 네트워크 지연에서 분리하는 서버-클라 동기화 모델

핵심 개념

용어정의
통지 모델 (Notify-on-event)서버가 사건이 일어나는 매 순간 패킷을 보내는 방식
타임라인 디스패치 (Timeline Dispatch)사건이 확정되는 시점에 향후 구간 전체를 한 번에 내려보내는 방식
시작 시점 정렬클라가 타임라인의 t=0를 자기 로컬 시간 기준으로 잡고 재생
무효화 메시지예정됐던 타임라인 항목을 재생 전에 취소하는 패킷
덮어쓰기 (Override)새 타임라인을 보내며 기존 타임라인을 특정 시점 이후로 잘라내는 것
보정 연출이미 재생된 타임라인이 실제와 어긋났을 때 위치/체력을 스냅·롤백하는 시각적 보정

두 모델 대비

모델패킷 전송 시점클라 재생 시점네트워크 지연 영향
Notify-on-event사건 발생 순간패킷 도착 순간사건마다 RTT 어긋남 누적
Timeline Dispatch사건 확정 순간로컬 시간 기준 재생타임라인 시작 시점만 밀림 (상대 타이밍 보존)

적용 가능 조건

서버 시뮬레이션이 결정적이고, 사건 확정 시점에 향후 구간을 미리 계산할 수 있어야 한다.

  • 스킬: 시전 확정 직후 몇 백 ms 동안 누가 언제 맞고 데미지·경직이 얼마인지 전부 도출 가능
  • 자동이동: 경로 선분이 시작 시점에 이미 알려져 있음
  • 결정 불가능한 사건(플레이어 입력, 외부 이벤트)은 이 모델로 묶을 수 없다

스킬 적용 예

  1. 시전 확정 시 서버가 전체 판정 미리 실행 — (t_offset, target, damage, stagger) 리스트
  2. 결과를 타임라인 한 패킷으로 묶어 내려보냄
  3. 클라는 로컬 시간 기준으로 t=0.3s에 A 피격, t=0.45s에 B 피격 재생

피격 연출과 데미지 숫자가 캐릭터 모션과 동기화됨. 핑이 50ms든 200ms든 연출 짜임새는 동일.

이동 적용 예 — 선행 전송

지금 선분만 보내지 말고 다음 선분까지 같이 내려준다.

t=0    선분 1 (지금 ~ t=0.8s) + 선분 2 (t=0.8s ~ t=1.5s)
t=0.8  서버가 선분 3 송신
t=1.5  선분 2 종료 시점에 선분 3 이미 도착해 있음 → 즉시 이어감

선분 종점에서 RTT만큼 머뭇거리던 현상이 사라짐. 장거리 자동이동의 누적 지연 제거.

무효화 / 덮어쓰기 처리

미리 보낸 타임라인이 실제와 어긋날 수 있는 경우(은신, 무적, 죽음, 경로 변경, 스킬 캔슬):

처리적용 시점클라 동작
무효화 메시지아직 재생 전해당 타임라인 항목 제거
덮어쓰기새 타임라인 발급 시이전 타임라인을 특정 t 이후로 잘라내고 신규 재생
보정 연출이미 재생된 항목이 거짓이었을 때체력 회복 / 위치 스냅 등 시각 보정

구간 길이 트레이드오프

길이장점단점
짧음도중 무효화 빈도 낮음네트워크 왕복 잦음
지연에 강함도중 틀어질 확률 증가 → 보정/롤백 빈도 ↑

효과

  • 클라 연출 타이밍이 네트워크에서 분리됨
  • 핑 변동이 타격감을 무너뜨리지 않음
  • 긴 자동이동이 매끄럽게 이어짐

일반화

“지금” 통지에서 “다음” 선행 전달로 모델 전환.

서버-클라 관계가 매 사건마다 실시간 통지 에서 예측 가능한 구간을 묶어 선행 전달 + 틀어지면 보정 으로 바뀌는 것이 본질.

관련