네트워크🔗/이론

Actor의 Role: NetRole

공부하는탱자 2024. 12. 6. 17:51

1. 정의

- NetRole: 현재 객체(Actor)의 네트워크 역할(권한 수준) 확인

- 권한 수준 확인 목적

: 게임 버전 및 모든 로직에 대한 유효성을 판별하여 관리 감독 권한(Authority)을 통한 안전성과 신뢰성 확보

2. 종류

NetRole의 종류가 Enum으로 정의되어있음

1) LocalRole

(1) 정의

- 현재 실행 중인 인스턴스(로컬 환경)에서의 Actor 역할

 

(2) 값

- ROLE_None

• 정의: 네트워크와 관련 역할이 없는 상태

 

 특징

: 네트워크 상에서 역할이 필요없거나 관계 없는 객체에서 사용

  → 네트워크 권한이 없기 때문에 네트워크 동기화가 발생하지 않음

: 주로 로컬에서만 사용하는 객체

 

- ROLE_SimulatedProxy

*Proxy(복제): 클라이언트는 서버에서 복제된 것을 받아 사용

  정의: 이 인스턴스에서 시뮬레이션만 수행

 

 특징

: 서버에서 Actor가 클라이언트에 전송됐을 때 클라이언트에서 객체를 시뮬레이션 하기 위해 사용

  → 서버의 데이터를 받아 클라이언트 쪽에서 로컬로 시뮬레이션 하기 때문에 네트워크 동기화 발생

  클라이언트는 객체에 대한 시뮬레이션만 담당하기에 실제 데이터 관리/권한은 서버에서 발생

 

- ROLE_AutonomousProxy

  정의: 클라이언트가 직접 제어하는 객체(Actor)

 

 특징

: 클라이언트에서 객체를 직접 제어하기 때문에 객체에 대한 입력 / 동작 처리

: 클라이언트에서 서버로 객체에 대한 상태를 전송하면 서버가 변경된 객체의 상태를 확인해 네트워크 동기화

 

- ROLE_Authority

  정의: 서버에서 객체를 소유해 해당 객체의 상태 관리

 

 특징

: 서버가 객체에 대한 모든 권한을 가지고 상태를 처리해 클라이언트 서버에 필요한 정보 전달

: 서버에서 클라이언트서버로 상태 전송 / 클라이언트서버에서 받은 정보 검증해 동기화

 

(3) 특징

- 로컬Role 기준으로 서버에 있는 모든 Actor는 기본적으로 Role_Authority를 가짐

: 서버가 모든 Actor의 소유권과 상태관리 권한을 기본적으로 가지고 있음

 

- 서버 간 객체에 대한 Role 상이

객체 위치 / 보는 서버 서버 '내' 클라이언트 서버 '다른' 클라이언트 서버
서버 ROLE_Authority ROLE_SimulatedProxy ROLE_SimulatedProxy
'내' 클라이언트 서버 ROLE_Authority ROLE_AutonomousProxy ROLE_SimulatedProxy
'다른' 클라이언트 서버 ROLE_Authority ROLE_SimulatedProxy ROLE_AutonomousProxy

* 이 클라이언트는 상대방의 입장에서 자기자신의 서버라고 가정

 

2) RemoteRole

(1) 정의

- 원격 네트워크 인스턴스(서버)에서의 Actor의 역할

 

(2) 값

- ROLE_None

• 정의: 원격 Actor가 없음

 

 특징

: 네트워크 상에서 역할이 필요없거나 관계 없는 객체에서 사용

  → 네트워크 권한이 없기 때문에 네트워크 동기화가 발생하지 않음

: 주로 비네트워크 객체 / 게임 플레이와 직접 연결되지 않은 객체

 

- ROLE_SimulatedProxy

• 정의: 서버의 Actor를 클라이언트에서 시뮬레이션

 

 특징

: 클라이언트 서버에서는 상태만 시뮬레이션 가능하며, 객체에 대한 권한 / 입력 처리 불가

: 서버에서 해당 객체에 대한 상태 유지

 

- ROLE_AutonomousProxy

• 정의: 클라이언트 서버에서 Actor를 자율적으로 제어

 

 특징

: 클라이언트에서 객체에 대한 직접 제어 및 입력 처리

: 서버에서 해당 객체에 대한 상태를 클라이언트 서버로부터 수신해 상태가 일관되도록 관리

 

- ROLE_Authority

• 정의: 서버에서 Actor에 대한 모든 권한 소유

 

 특징

: 서버에서 권한을 가진 객체는 모두 ROLE_Authority 소유

: 서버에서 객체에 대한 상태를 최종적으로 제어하기에 클라이언트 서버에서는 서버에서 수신한 상태를 받아 시뮬레이션만 가능

 

3) LocalRole과 RemoteRole 비교

구분 LocalRole RemoteRole
정의 현재 인스턴스(로컬)에서 객체(Actor)가 수행 중인 역할 원격 인스턴스(서버)에서 객체(Actor)가 수행중인 역할
Role_None, Role_SimulatedProxy, Role_AutonomousProxy, Role_Authority
적용관점 로컬 인스턴스 기준으로 Actor의 네트워크 권한 확인 원격 Actor의 상태 동기화 / 시뮬레이션 관리
사용목적 로컬 환경에서 권한에 따른 작업 수행 원격 환경에서의 Actor 동작 확인 및 동기화
결정시점 로컬에서 Actor의 네트워크 역할 결정 서버의 Actor가 로컬에 전달될 때 역할 결정

 

4) LocalRole과 RemoteRole 실제 적용

(1) 뷰포트 = 서버

(2) Network 프리뷰 = 각각의 클라이언트

 

728x90