<aside>
한 줄 요약: 권위 서버의 게임 루프는 입력 드레인 → 고정 틱 → sleep이 정석이며, 부하가 천장에 닿을 때를 대비해 상한 + 배치 + 오버플로 3겹 안전장치가 필요하다.
</aside>
권위(authoritative) 게임 서버 한 프레임의 표준 구조:
while (running) {
[1] 입력 드레인 // 네트워크 이벤트 큐를 소비
[2] 시뮬 1틱 // 모든 엔티티를 deltaTime만큼 갱신 (이동/충돌/AI)
[3] 결과 송신 // 변경된 상태를 주변에 브로드캐스트
[4] sleep // 다음 틱까지 남은 시간 대기 (레이트 고정)
}
왜 "입력을 다 받고 → 시뮬 1틱"인가 (입력 레이트와 시뮬 레이트 분리):
<aside> 💡
용어 — 틱(tick): 시뮬레이션 1스텝. 틱레이트: 초당 틱 수(Hz). 고정 틱: 매 틱 동일 시간 간격을 목표로 하는 방식.
</aside>
상용 MMO에서 널리 쓰는 정석 패턴 중 하나: "존 하나 = 로직 스레드 하나".
| 장점 | 단점 |
|---|---|
| 락 없는 단순/안전한 로직 | 단일 존 처리량 = 코어 1개 천장 |
| 결정적 시뮬, 디버깅 쉬움 | 한 틱이 무거우면 그 존 전체가 느려짐 |
| I/O와 로직 관심사 분리 | 존 간 이동/상호작용은 별도 처리 필요 |
핵심: 단일 스레드 자체는 죄가 아니다. 죄는 그 위에 무거운 작업(I/O fan-out 등)을 얹는 것.
입력 큐를 "어떻게 비울 것인가"의 3가지 패턴: