Starsiege: Tribes는 FPS 게임으로 최대 128명까지 접속 가능한 게임 모드를 제공하였다.
게임에 대한 자세한 설명은 https://en.wikipedia.org/wiki/Starsiege:_Tribes
Starsiege: Tribes - Wikipedia
Starsiege: Tribes is a first-person shooter video game. It is the first of the Tribes video game series and follows the story from Metaltech: Earthsiege and Starsiege. It was developed by Dynamix and published by Sierra On-Line in 1998. An expansion pack,
en.wikipedia.org
1998년 말에 출시된 게임이 대규모 인원을 수용한다는 것은 딱봐도 어려울 것 같다.. 그 당시엔 인터넷을 전화 접속으로 했는데 전화 접속용 모뎀은 56.6kbps밖에 되지 않는다. 일단 속도도 느리고.. 레이턴시도 높게 발생해서 어려움이 있었을 것 같다.
통신 프로토콜(Communication Protocol)
서로 다른 기기들 간의 데이터 교환을 원활하게 할 수 있도록 표준화시킨 규약
- 네트워크 게임을 설계할 때 가장 먼저 정해두어야 함
- <트라이브스>는 비신뢰성 프로토콜을 사용함 *비신뢰성 프로토콜: 네트워크로 보낸 데이터가 수신자에게 반드시 도착해야 한다는 보장이 없음
- 비신뢰성 프로토콜을 사용하게 되면 문제가 발생할 수도 있음(중요한 데이터), 데이터의 종류에 따라 보낼 방법을 구분해 두어야 한다.
- P2P(Peer-to-peer) 대신 CS(Client-Server) 모델을 사용함
- P2P 모델은 O(n2)의 대역폭 필요(각각의 플레이어가 모든 플레이어와 연결을 유지해야 함), 사용자 수의 제곱에 비례하여 대역폭이 소모됨
- CS 모델은 O(n)의 대역폭 필요(모든 플레이어가 중앙 서버 하나에 접속)
<트라이브스> 네트워킹 모델
stack 구성
[구성 요소 - stack]
- 게임의 시뮬레이션 계층(고스트 관리자, 이동 관리자, 이벤트 관리자, 기타 등)
- 스트림 관리자
- 연결 관리자
- 플랫폼 패킷 모듈 (최하위 계층)
1. 플랫폼 패킷 모듈(최하위계층)
*패킷: 네트워크로 보내기 위해 데이터를 묶은 한 단위
- 표준 소켓 API를 wrapping해 놓은 것(다양한 패킷 형식을 조립하고 전송하려는 목적)
2. 연결 관리자(connection manager): 두 컴퓨터 사이의 연결을 추상화함
- 윗단의 스트림 관리자가 내리는 데이터를 받아 플랫폼 패킷 모듈로 전달함
- 신뢰성 보장하지 않음
- DSN(Delivery Status Notification) 보장 -> 패킷이 전달되었는지 여부까지만 연결관리자가 알려줌, 스트림 관리자는 특정 데이터가 무사히 전달되었다는 것을 확인할 수 있음(acknowledge에 따른 sliding window 기법)
3. 스트림 관리자(stream manager): 다른 여러 상위 관리자를 대신하여 데이터를 연결 관리자에 보냄
- 허용 최대 데이터 전송률 조절
- 여러 시스템이 각자 스트림 관리자에 데이터 전송을 요청하는데, 이들의 우선순위를 관리함
- 대역폭이 제한된 상황에서는 이동 관리자, 이벤트 관리자, 고스트 관리자의 요청이 최우선
- 데이터 결정후에는 패킷으로 연결 관리자에 보냄, 상위 관리자에 전달 여부를 알려줌
- 전송 주기, 패킷 크기 결정, 한 패킷에 여러 종류의 데이터를 섞어 보냄
4. 이벤트 관리자(event manager): 게임 시뮬레이션 중 발생하는 이벤트의 대기열 관리
- 일종의 RPC(Remote Procedure Call): 호출 시 원격 머신에서 실행되는 함수 또는 프로시저
- 이벤트의 우선순위를 매겨 높은 이벤트부터 기록하고 특정 조건이 되면 처리를 중단함
- 이벤트 전송기록을 추적하고 확인응답이 없으면 대기열 맨 앞에 다시 이벤트를 끼워넣음
5. 고스트 관리자(ghost manager): 특정 클라이언트에게 유의미하다고 여겨지는 동적 개체를 복제시켜 '고스트'사본을 만듦
- '고스트': 클라이언트가 서버에서 받아둔 여러 객체 정보 -> 클라이언트상 서버 객체의 고스트
- 클라이언트에 딱 필요한 정보만 걸러서 보냄
- '반드시 파악'해야 하는 객체 -> 높은 우선순위 / '알아 두어야' 하는 객체 -> 낮은 우선순위
- 유의미한 객체 집합 계산 후에는 서버에서 클라이언트로 가능한 많은 객체 상태를 전송함
- 고스트의 최신상태가 중요하기 때문에 고스트 관리자는 항상 모든 클라이언트가 최신의 상태이게끔 보장함
6. 이동 관리자(move manager): 플레이어의 이동 데이터를 최대한 빨리 전송함
- latency를 줄여 플레이어가 지연을 느끼지 못하게 이동 데이터를 최대한 빠르게 갱신해 주어야 함
- 초당 30프레임의 빠른 속도로 입력 캡처를 수행하여 데이터를 생성함, 가장 높은 우선순위를 가짐
- 스트림 관리자에서는 이 데이터를 패킷 가장 앞에 끼워 내보냄
7. 기타 시스템
ex. 데이터블록 관리자(datablock manager): 정적인 객체 전송 (포탑 등. 실제 움직이지는 않지만 플레이어와 상호작용함)
책 출처: 멀티플레이어 게임 프로그래밍(조슈아 글레이저)
http://www.yes24.com/Product/Goods/38868446
멀티플레이어 게임 프로그래밍 - YES24
랙 없는 서버를 위해한방에 무너지지 않는 서버를 위해!현업 개발자가 알려주는 탄탄한 멀티플레이어 게임 프로그래밍〈리그 오브 레전드〉, 〈디스트로이 올 휴먼즈〉 시리즈를 컨설팅하고
www.yes24.com
'게임 개발 > 네트워크' 카테고리의 다른 글
인터넷 - #2. TCP/IP 스택의 계층 구조 (2) (0) | 2021.09.04 |
---|---|
인터넷 - #2. TCP/IP 스택의 계층 구조 (1) (0) | 2021.08.30 |
인터넷 - #1. 패킷 스위칭 (0) | 2021.08.29 |
네트워크 게임 - #3. <Age of Empires> 결정론적 락스텝 모델 (0) | 2021.08.29 |
네트워크 게임 - #1. 역사 (0) | 2021.08.29 |