본문 바로가기

멀티플레이 공부

멀티플레이 공부(Server, Client, Dedicated Server 흐름도, 특징)

각각의 컴퓨터가 서버이자 클라이언트인 P2P 서버

서버이자 클라이언트인 방장(Host)이 있고 나머지 참가자(Guest)는 모두 클라이언트인 Listen 서버

서버를 담당하는 컴퓨터가 따로 있는 Dedicated 서버

 

위 3가지 서버중 Dedicated 서버에 대해 공부할 것이다.


Dedicated 서버의 실행 흐름도

 

PIE를 했거나, Server.exe를 실행하는 식으로 서버 프로세스 실행.

실행할 때 Open {Level이름}?Listen 명령어가 인자로 전달. 해당 Level을 열어둔다.

이때 Socket이 생성되며 다른 PC가 접속 가능하게 한다. Listen 명령어가 없다면 싱글플레이.

Level에는 WorldSettings 속성이 있고, WorldSettings에는 GameMode와 GameState 정보가 있다.

이를 통해 GameMode와 GameState 액터를 생성.

중요한 것은 GameMode 액터는 전체 컴퓨터에서 딱 한 곳(Server)에만 존재한다.(GameMode = Server)

클라이언트는 서버의 IP주소와 포트번호로 접속을 시도한다.

서버는 접속 시도하는 클라이언트에게 Level 정보를 넘긴다.

클라이언트도 해당 Level을 열고, 여는데 성공했다고 서버에게 알림.

Level을 여는데 성공한 클라이언트 전용 PlayerState, PlayerController, PlayerCharacter가 서버에 생성.

이것이 다시 Client1에 복제되며 GameState도 같이 복제된다.(GameMode는 복제안됨)

또 다른 클라이언트도 접속.

마찬가지로 서버는 접속 시도하는 또 다른 클라이언트에게 Level 정보를 넘긴다.

클라이언트2도 해당 Level을 열고, Level을 여는데 성공했다고 서버에게 알림.

Client2 전용 PlayerState, PlayerController, PlayerCharacter가 서버에 생성됩니다.

이것이 다시 Client2에 복제되며 GameState도 복제된다.

이때, 클라이언트 간의 PlayerState와 PlayerCharacter도 복제되면서 서로가 보이게 된다.

서버 - 클라이언트 구조의 중요한 특징

위 흐름도에서 볼 수 있듯이 클라이언트 간의 통신이 불가능하다.

오직 서버와 클라이언트 사이의 통신만 가능하다.

이 개념은 RPC나 프로퍼티 레플리케이션에도 영향을 끼친다.(아직 안배움)