1. 서버의 종류
P2P Server(Peer to Peer Server)
- 설명
- 플레이어들끼리 직접 데이터를 주고받는 방식
- 호스트가 별도로 존재하지 않거나, 한 명이 자동으로 호스트 역할 수행
- 장점
- 단점
- 보안 취약(핵)
- 핑 불안정
- 호스트 나가면 게임 종료 → 다른 클라이언트가 호스트를 이어받을 수 있다
Listen Server
- 설명
- 한 명의 플레이어가 서버를 직접 실행하며 동시에 게임에도 참여함
- 장점
- 단점
Dedicated Server
-
설명
- 별도의 컴퓨터(또는 클라우드)가 서버 역할만 전담
- 플레이어들은 접속만 함
-
장점
- 안정적이고 지속적인 서버 유지 가능
- 커스터마이징 용이
-
단점
2. Dedicated Server 실행 흐름
[Server 실행]
↓
Open {Level}?Listen
↓
소켓 열림 (접속 대기)
↓
[Client 접속 요청]
↓
서버가 Level 정보 전달
↓
클라이언트 Level 로드 완료
↓
서버: PlayerState, Controller, Character 생성
↓
클라이언트: 해당 객체 복제 받음
↓
GameState 동기화
↓
[다른 클라이언트 접속 시 반복]
↓
클라이언트 간 객체 정보도 서로 복제됨
[경호튜터님 강의 노션]
1️⃣ 서버 실행
- PIE(Play In Editor with Dedicated Server) 실행 또는 Server.exe 실행
- 실행 시 인자로
Open {Level명}?Listen 전달
→ 해당 Level이 열리고 Listen Socket 생성
→ 외부 클라이언트 접속 가능
Listen 옵션이 없다면 싱글플레이 모드 실행됨
2️⃣ 클라이언트 접속
- 클라이언트는 서버의 IP주소 + 포트번호로 접속 시도
- 서버는 접속 요청을 받으면 Level 정보를 클라이언트에 전달
- 클라이언트는 받은 Level을 로드
→ 성공 시 서버에 “로드 완료” 통지
3️⃣ 서버 측 객체 생성 & 복제
- 클라이언트가 접속 완료되면 서버는 해당 클라이언트 전용으로 다음 객체 생성:
- PlayerState
- PlayerController
- PlayerCharacter
- 생성된 객체들은 클라이언트 측으로 복제됨 (Replicate)
- GameState도 클라이언트로 동기화
4️⃣ 다중 클라이언트 상황
- 새로운 클라이언트가 접속하면 동일한 절차 반복
- 예) Client2 접속 시
- 서버가 Level 정보 전달 → Client2가 로드 완료 통지
- 서버에서 Client2 전용 객체들 생성
- 해당 객체가 Client2에도 복제됨
- 또한 기존 클라이언트(Client1)와 새로운 클라이언트(Client2) 간에도 PlayerState, PlayerCharacter가 교차 복제
→ 서로의 캐릭터/상태를 볼 수 있게 됨
5️⃣ 클라이언트 간 통신
- 클라이언트끼리 직접 통신 불가
- 반드시 서버를 경유해야 함
→ 예: Client1 → Server → Client2
특징
Server
GameMode 액터는 딱 한 곳(Server)에만 존재
→ GameMode 와 Server 를 동일시 가능
- Level 관리 + 객체 생성/복제 + 클라이언트 간 중계 역할을 수행
Client
- Level 로드 + 서버로부터 받은 객체 반영 역할