Client-Server vs P2P

Byeonggwan Kang·2021년 8월 24일
0
post-thumbnail

초기 멀티플레이어 게임들은 로컬, MUD, 랜 게임을 지나 온라인 게임까지 발전했습니다.
랜 게임이 온라인 게임으로 나아가기 위해 해결해야 할 문제는 레이턴시(latency)입니다.

레이턴시(latency)는 네트워크로 데이터를 전송하면서 발생하는 시간 지연이다.

이를 해결하는 방법은 차후에 정리하겠습니다.


클라이언트-서버 vs P2P

이 책에서는 스타시즈: 트라이브스와 에이지 오브 엠파이어를 예시로 클라이언트-서버와 P2P의 차이를 설명한다. 또한 여기서 설명하는 P2P는 결정론적 락스텝 모델을 사용한다.

클라이언트-서버

서버에 여러 클라이언트가 접속하는 방식입니다. 플레이어의 위치, HP 등 중요한 정보를 서버가 빠르게 동기화할 수 있도록 레이턴시를 최대한 줄여야 합니다. 따라서 클라이언트-서버에서는 네트워크 모델을 여러 부분으로 나눠 명령을 우선순위에 따라 처리합니다.

P2P

모든 서버 및 클라이언트를 연결하는 방식입니다. RTS 게임을 예시로 들 수 있습니다. 데이터를 빠르게 보내고 받을 수 있습니다. 하지만 모든 상황을 플레이어가 동일하게 보이게 하기 위해서, 동기화하는 방식이 무척 중요합니다.

이 책에서 사용한 동기화 방식은 턴 타이머(turn timer)로, 정해진 한 턴 동안 모든 명령을 모아서 송신한 뒤 수신 측에서 받고 몇 턴 뒤에 처리하는 방식입니다.

예시로, 한 턴을 200ms라고 하자. 그럼 200ms 동안 플레이어가 내린 명령을 모든 컴퓨터에 송신한다. 이를 2턴, 즉 400ms 뒤에 명령을 실행하는 것이다.

우리가 잘 알고 있는 스타크래프트가 이 턴 타이머 방식을 사용합니다. 이 방식의 장점은 모든 컴퓨터가 동기화 되기까지 시간이 넉넉하다는 점입니다. 모든 컴퓨터가 명령을 보낸 뒤 n턴 동안 여유를 두고 기다리기 때문에, 네트워크 속도가 느리더라도 다같이 처리할 수 있습니다. 또한 명령을 차근차근 쌓아둘 수 있기 때문에 후에 리플레이 기능을 구현하기도 편리합니다.

0개의 댓글