멀티 플레이어 게임의 역사

 

1. 로컬 멀티플레이어 게임

한 컴퓨터에서 2명 이상의 플레이어가 같이 즐기는 게임

구현 방식은 싱글 플레이와 크게 다를 것 없이 하나의 컴퓨터에 여러 Input값을 받아와 처리

 

2. 초기 네트워크 멀티플레이어 게임

메인프레임으로 구성된 소규모 네트워크에서 처음 등장

전산실에 매우 큰 컴퓨터가 있었고 이것이 메인 프레임이라 했다.

매번 전산실에 가는것이 귀찮았던 사람들은 통신 규칙을 세워서 소규모 네트워크를 구축하였다. (인터넷X)

 

3. MUD (Multi User Dungeon) 게임

MUD게임은 텍스트 기반으로 진행되는 멀티플레이어 게임.

 

4. LAN (Local Area Network) 게임

이더넷(Ethernet)이 보급되면서 근거리 통신(LAN)를 이용한 게임이 등장

* 이더넷(Ethernet) : LAN을 위해 개발된 근거리 유선 네트워크 통신망 기술로 IEEE 802.3에 표준으로 정의 되어있다.

 

5. 온라인 게임

LAN들을 연결한 인터넷(Internet)이 보급되면서 온라임 게임이 등장

LAN게임과 구현은 비슷하나 레이턴시(Latency)에 따른 부작용을 최소화하는 기법이 생겨남

서버를 여러개 만들어(아시아, 유럽, 북미 서버 등..)  관리하여 물리적인 거리를 좁히거나,

게임에서 눈속임을 통해 레이턴시의 발생을 느끼지 못하도록 하는 등 레이턴시를 극복하기 위한 노력이 생겨났다.

* 레이턴시 (Latency) : 네트워크로 데이터를 전송하며 발생하는 시간 지연

* 핑 (ping) : IP 네트워크를 통해 특정한 호스트가 도달할 수 있는지의 여부를 테스트하는 데 쓰이는 컴퓨터 네트워크 도구 중 하나

 

6. MMO (Massively multiplayer online) 게임

하나의 게임 세션에 다수의 플레이어가 동시에 참여하는 게임.

 

7. 모바일 네트워크 게임

초기 모바일 게임은 싱글 플레이 게임이 주를 이루었으며,

초기 모바일 네트워크 게임은 비동기식 구현이 주를 이루었다.

*비동기식 : 외부 데이터가 필요할 때 네트워크를 잠깐 연결하여 데이터를 교환한다.

 

스마트폰의 보급과 네트워크 기술의 발전으로 모바일 네트워크 게임이 발전하였다.

 

 

게임서버

게임 서버의 역할

게임 루프 (Input - Update - Render) 가운데 업데이트 일부를 떼어 내어 실행한다.

게임의 특정 행동(플레이어의 행동에 따른 데이터와 같이 민감한 데이터 등)의 판단은 서버가 한다 

 

네트워크 토폴로지

네트워크 상 연결되어 있는 양태를 말한다.

컴퓨터끼리 어떻게 연결시킬 것인가에 대한 이야기 (요즘에는 Star 또는 Fully Connected를 사용한다고 한다.)

 

- 클라이언트 - 서버 (Client - Server)

가장 대중적인 구조로 하나의 컴퓨터에 여러 컴퓨터가 접속하는 방식으로 성형 구조(Star)이다.

권한 집중형(Authoritative)으로 서버 컴퓨터가 모든 행동에 대한 판정을 서버가 내린다.

 

데디케이티드(Dedicated) 서버

게임을 서비스하는 업체의 고성능 컴퓨터가 서버를 형성하여 제공하는 방식

 

리스닝(Listening) 서버 (=피어 호스팅 Peer Hosting)

플레이어가 직접 서버를 형성하는 방식 ( 유저가 방을 생성하여 진행하는 게임 )

 

- 피어 투 피어 (Peer To Peer)

P2P는 게임에 참여하는 모든 컴퓨터끼리 서로 접속하는 방식(Fully Connected)이다.

판정을 담당하는 데디케이티드 서버가 없다.

보편적으로는 컴퓨터 끼리 입력을 서로 공유하여 이들을 스스로 시뮬레이션 하는 방식 (락스텝 동기화)

 

락스텝(Lockstep) 동기화

일정 시간동안 게임이 멈추고 멈춰있는 동안 받은 입력을 큐에 모아놓는다.

일정 시간이 지나면 규에 모아 놓은 데이터를 서로 교환하여 각자 처리하는 방식 (처리 속도가 빨라 실시간처럼 보인다)

 

 

게임 플레이 네트워킹

서로 다른 클라이언트가 같은 화면을 보여주기위한 기법

 

모든 연산을 서버가 부담

가장 고전적인 방법으로 클라이언트는 입력과 출력만 담당하고 모든 연산을 서버가 부담하는 방식

네트워크 부하가 심한 방식이었으나 기술의 발전으로 클라우드 게임으로 재탄생 하게 되었다.

 

렌더링을 클라이언트에서 하기

보편적인 방법으로, 서버가 게임 상태를 보내고 클라이언트에서 렌더링을 진행한다. (PC에 그래픽 카드가 필요해졌다.)

채팅이나 캐릭터의 이동 같은 게임 월드 업데이트는 서버가 클라이언트로부터 메시지를 받아 진행한다.

*메시지 : 네트워크 상에 보내지는 데이터

 

서버가 목표한 프레임만큼 업데이트하는 것이 좋으나, 수 많은 데이터의 업데이트를 처리하기는 어렵다.

때문에 서버의 업데이트 주기를 늘리게 되는데, 업데이트 주기가 늘어나면 게임의 프레임이 떨어져 보일 수 있다.

따라서 이를 해결하기 위해 아래와 같이 다양한 방법을 통해 극복하였다.

 

1) 레이턴시 마스킹(Latency Masking) : 플레이어가 레이턴시를 느끼지 못하도록 추측항법(Dead Reckonning) 등 사용

*추측항법 : 이미 아는 출발위치(datum)에서 침로와 속력을 계산하여 자신의 위치를 추측하며 항해하는 방법

2) 플레이어에게 필요한 가시 영역만 전달

3) 락스텝 동기화

 

 

리플리케이션 (Replication)

항상 게임의 상태는 일관된 상태를 유지해야한다.

일관된 게임 월드 상태를 유지하기 위해 리플리케이션 ( Replication ) 을 한다.

리플리케이션은 객체의 상태를 한 호스트에서 다른 호스트로 복제 전달하는 행위이다.

내 캐릭터가 움직이면 다른 클라이언트에서도 보여줘야 한다.

- 내용 추가 필요 -

 

직렬화(Serialize)

서로 다른 컴퓨터 간에 데이터 전송을 위한 기법으로 일련의 바이트열로 바꾸는 것 ( ! 역직렬화 )

데이터가 다른 메모리 주소인 경우나 긴 데이터를 압축하기 위해 필요하다.보통 json 형식이 많이 사용되며,

프로토콜 버퍼 ( Protocol Buffer ) 라이브러리도 많이 사용된다.

 

객체의 메소드를 호출할 때 RPC ( Remote Proceduce Call ) 를 사용한다.

* RPC : 다른 호스트의 특정 프로시저가 원격 수행되도록 지시하는 것

 

 

 

[여담]

DDOS (Distributed Denial of Service)

서버는 사용할 수 있는 자원이 한계에 달하면 다른 서버로 전환한다 (로드벨런싱)

서버가 가용할 수 있는 자원의 한계 이상으로 요청을 보내 서버를 사용하지 못하도록 하는 공격

DDOS공격에 대한 근본적인 해결책은 없으나 사람이 불가능한 행동의 접근을 막는 방법 등으로 서버를 보호한다.

 

728x90

'Program > Server' 카테고리의 다른 글

[Photon] 서버 개요  (0) 2022.09.13
[NodeJS] http 모듈로 서버 만들기  (0) 2022.09.13
[NodeJS] 노드 내장 모듈  (0) 2022.09.13
[NodeJS] Process  (0) 2022.09.13
[NodeJS] 이론  (0) 2022.09.06

+ Recent posts