[CS] 네트워크 #2
온라인 게임의 종류
- 싱크(Sync): 동기, 실시간
- 온라인 서버(클라우드)
- LAN 파티
- 어싱크(Async): 비동기
CAP 이론
- Consistency(일관성): 공유되는 데이터가 동일한 상태를 보장
- Availability(가용성): 데이터에 접근하여 언제든 Read, Write 가능
- Partition Tolerance(분할 용인): 시스템이 분할되어 병렬 처리 가능
* 일관성을 추구 ㅡ> 가용성, 분할 용인 중 하나는 포기
ex) 사용자가 컨트롤 중인 클라이언트 먼저 업데이트 ㅡ> 가용성 우선, 일관성 보장 X
게임에서의 동기화
초기의 게임
- 클라이언트 ㅡ> 서버 접속
- 서버 ㅡ> 모든 클라이언트가 접속하면 게임 시작(상태 초기화)
- 클라이언트 ㅡ> 이벤트 발생(이동,공격 등)
- 서버 ㅡ> 이벤트 수집 ㅡ> Round(or Tick)마다 브로드캐스팅(모든 클라이언트에게 전달)
- 클라이언트 ㅡ> 상태 업데이트
* 4번에서 알 수 있듯이 Round만큼 딜레이가 생기기 때문에 빠른 반응속도를 요하는 게임에는 부적합
ㅡ> 따라서 빠른 반응속도를 요하는 FPS, MMO와 같은 장르들에서는 빠른 반응속도를 필요로 하는 캐릭터의 이동과 같은 부분에서 Round를 짧게 브로드캐스팅하고, 실시간으로 별도의 채널을 통해 다중 브로드캐스팅하는 방법으로 해결
가용성 보정
CP설계: 가용성 포기, 일관성 우선
CP설계의 동기화 흐름
- 이벤트 발생
- 게이머에게 피드백(사운드나 이펙트로 Delay를 숨김)
- 서버에 이벤트 전송
- 서버가 브로드캐스팅한 데이터로 클라이언트 업데이트
- 즉, 이벤트가 발생하고 서버에서 브로드캐스팅을 하기 전까지는 클라이언트에서 상태 업데이트 X
ㅡ> 그렇기 때문에 클라이언트에게 사운드나 이펙트로 효과를 연출해 상태 변화가 일어나기까지의 시간을 버는 느낌 - 턴제 게임에 적합 ㅡ> 플레이어의 턴이 끝날때까지 다른 플레이어의 입력은 없기 때문
- 스타크래프트와 같은 게임은 일정 시간 동안의 이벤트를 모았다가 브로드캐스팅하는 방식이라고 함
- 서버와 클라이언트의 값이 항상 같음 ㅡ> 일관성 보장
- But, 클라이언트의 상태 값은 서버에서 변경된 값을 브로드캐스팅할 때만 변경 ㅡ> 가용성 포기
일관성 보정
AP설계: 가용성 우선, 일관성 포기
AP설계의 동기화 흐름
- 이벤트 발생
- 게이머에게 피드백(사운드, 이펙트 및 예측한 값으로 미리 상태 업데이트 반영)
- 서버에 이벤트 전송
- 서버가 브로드캐스팅한 데이터와 예측값 비교
- 예측이 맞으면 그대로
- 예측이 틀렸다면 서버가 브로드캐스팅한 값으로 반영
- CP와 달리 클라이언트에서 예측한 값을 토대로 미리 상태가 업데이트되고, 후에 서버에서 브로드캐스팅된 값과 비교하여 예측이 다른 경우 서버에서 온 데이터로 반영
- 결과적으론 CP설계에 비해 반응성이 향상
- But, 클라이언트와 서버의 값이 같다는 일관성을 보장하지 못함
클라이언트 보간(Interpolation)
- 네트워크는 불안정한 전기 신호를 주고 받음
- 결과적으로 서버에서 1/20초 마다 브로드캐스팅되는 데이터가 클라이언트에 1/20초 마다 도달한다는 보장X
- 불규칙적으로 오는 값들을 그때그때 반영한다면 사용자경험에 좋지 못함
- 이를 클라이언트에서 보간 (Unreal은 자동)
클라이언트 보간의 흐름
- 서버 데이터 수신: 서버에서 일정 시간마다 캐릭터 위치 클라이언트에 전송
- 클라이언트 버퍼링: 도착한 데이터를 바로 반영하지 않고 버퍼에 저장
ㅡ> 네트워크 지터(Network Jitter) 보정 및 보간에 사용할 데이터 확보 - 보간 계산: 현재 위치와 서버로부터 받은 캐릭터의 위치 값을 이용해 특정 시점의 두 위치 사이의 보간된 위치 값 계산
- 렌더링: 매 프레임마다 보간된 위치를 화면에 반영
ㅡ> 네트워크 지연 해결, 매끄러운 애니메이션
비동기(Async)
- 네트워크 세션 유지가 어려운 모바일 환경에서 사용
- 보장된 데이터 사용
ㅡ> 이를 위해 TCP 사용 (속도보단 안정성이 중요) - 이벤트만 서버로 전송 ㅡ> 서버는 이벤트를 검증 ㅡ> 그 결과를 DB 저장
* 게임 플레이어 외에 다른 플레이어의 접속 여부와 상관없이 게임 진행 가능
참고자료
https://onduway.tistory.com/106
CAP 이론 소개 - 데이터베이스 초보자용
밑에 세줄요약 있음 살펴보기 CAP 이론이란? MongoDB의 CP 시스템과 Cassandra의 AP 시스템 CAP란? 분산 데이터베이스는 방대한 데이터를 다루기에 유용한 시스템이다. 분산 데이터베이스는 수평 확장할
onduway.tistory.com
https://etloveguitar.tistory.com/159
[분산 시스템] CAP 이론 제대로 이해하기 (CAP Theorem) (CAP에 대한 오해를 풀어보자)
NoSQL을 공부하다보면 가장 많이 접하게 되는 단어 중 하나가 CAP이다. 아무래도 NoSQL 스토리지들이 분산 시스템으로 동작하다보니, 이들을 이해하기 위해서는 꼭 알아두어야 할 개념이기 때문이
etloveguitar.tistory.com
온라인 게임의 이동처리 기법 - 데드 레커닝 2편 (보간 처리)
지난번 글에서 데드 레커닝에 대한 개념에 대해 알아보았습니다. 2010.11.05 - [프로그래밍/서버] - 온라인 게임의 이동처리 기법 - 데드 레커닝 무려 13년 전쯤(...) 작성했던 글인데요 생각보다 읽어
cocoa106.tistory.com