아이리스(Iris)는 언리얼 엔진(UE)의 리플리케이션 시스템에 몇 가지 새로운 콘셉트를 도입합니다. 이 페이지는 아이리스 리플리케이션 시스템의 구성 및 작업과 관련하여 자주 사용되는 용어를 모아놓은 용어집입니다.
용어집
- 넷 RPC 핸들러
넷 RPC 핸들러는 수신된 RPC 생성 및 처리에 관련된 로직을 처리합니다. 예를 들어, 넷 RPC 핸들러는 액터가 여전히 RPC를 호출하기에 유효한지 여부를 결정합니다.
- 넷 RPC(Net RPC)
표준 RPC를 처리하기 위해 특별히 구현된 넷 블롭입니다.
- 넷 레퍼런스 핸들 매니저(Net Ref Handle Manager)
넷 레퍼런스 핸들 매니저는 모든 넷 오브젝트에 대한 내부 ID 및 상태 스토리지를 할당합니다.
- 넷 레퍼런스 핸들(Net Ref Handle)
넷 레퍼런스 핸들러는 네트워크 글로벌 고유 식별자(Network Globally Unique Identifier, NetGUID)와 비슷한 개념으로, 서버와 클라이언트 모두에서 오브젝트에 대한 고유 식별자입니다. 넷 핸들은 다음 오브젝트에 대한 오브젝트 레퍼런스에 사용됩니다.
정적으로 어드레스 가능한 오브젝트
리플리케이트된 오브젝트
- 넷 블롭(Net Blob)
넷 블롭은 오브젝트로 리플리케이트할 수 있는 항목에 대한 베이스 클래스입니다. 현재 아이리스 자체 외에서는 넷 블롭을 사용하지 않지만, 이를 사용하여 디버그 데이터나 RPC 같은 대부분의 데이터 또는 이벤트 타입을 전송할 수 있습니다.
- 넷 비트 스트림 리더(Net Bit Stream Reader)
넷 비트 스트림 리더는 메모리 버퍼로부터 비트를 효율적으로 디시리얼라이즈할 수 있게 해줍니다.
- 넷 오브젝트(Net Object)
넷 오브젝트는 게임플레이 코드에서 인스턴스화되는 리플리케이트된 오브젝트의 내부 네트워킹 표현입니다. 넷 오브젝트는 고유한 넷 레퍼런스 핸들 및 내부 인덱스와 연결되어 있습니다.
- 넷 토큰 데이터 스트림(Net Token Data Stream)
넷 토큰 데이터 스트림은 넷 토큰 데이터를 시리얼라이즈합니다.
- 넷 토큰(Net Token)
넷 토큰은 네트워킹에 반드시 직접적으로 관련이 있는 것은 아니지만, 서버와 클라이언트 간에 통신이 가능하기를 바랄 수도 있는 다양한 타입의 데이터에 대한 네트워크 오브젝트입니다.
넷 토큰으로 표현될 수 있는 오브젝트의 예는 다음과 같습니다.
스트링
데이터 블롭
패키지
시리얼라이즈 중에 익스포트되거나, 시작 시 로드되는 넷 토큰 데이터 스트림을 사용하여 명시적으로 클라이언트에 토큰 데이터를 전달할 수 있습니다. 넷 토큰 매니저에 원격 말단의 모든 토큰 상태를 쿼리할 수 있습니다.
- 데이터 스트림(Data Stream)
아이리스의 데이터 스트림은 일반 리플리케이션 시스템의 데이터 채널에 해당합니다. 데이터 스트림은 데이터 시리얼라이즈를 담당합니다. 또한, 데이터 스트림을 사용하여 다양한 데이터 타입에 대한 특정 데이터 전달을 보장할 수도 있습니다.
- 리플리케이션 데이터 스트림(Replication Data Stream)
리플리케이션 데이터 스트림은 리플리케이션 데이터의 시리얼라이즈와 디시리얼라이즈를 담당합니다.
이러한 작업은 다음 두 부분으로 나뉘어 구현됩니다.
리플리케이션 리더(Replication Reader)
리플리케이션 라이터(Replication Writer)
- 리플리케이션 라이터(Replication Writer)
리플리케이션 라이터는 모든 연결에 대한 모든 리플리케이트된 오브젝트의 상태를 트래킹하고 시리얼라이즈하는 작업을 담당합니다.
여기에는 다음이 포함됩니다.
다음 조건에 따라 리플리케이션 데이터를 예약합니다.
우선순위
예약 우선순위
리플리케이트된 오브젝트의 리플리케이션 상태
종속성
서브오브젝트
시리얼라이제이션
- 리플리케이션 레코드(Replication Record)
리플리케이션 레코드는 리플리케이션 라이터에서 전송 중인 데이터 목록입니다. 리플리케이션 라이터의 핵심 기능은 모든 전송 중인 데이터를 트래킹하는 것입니다. 이는 데이터가 손실되느냐 전달되느냐에 따라 적절하고 효율적으로 조처하기 위해서입니다. 리플리케이션 레코드는 전달 알림 보류 중인 전송 중 데이터가 있는 모든 오브젝트에 대한 링크 목록을 유지합니다.
- 리플리케이션 리더(Replication Reader)
리플리케이션 리더는 들어오는 데이터를 담당하는 내부 시스템입니다. 리플리케이션 브리지를 사용하여 디시리얼라이즈 및 상태 애플리케이션을 구동합니다.
- 리플리케이션 브리지(Replication Bridge)
리플리케이션 브리지는 게임플레이 코드와 네트워킹 코드 간에 데이터를 전송합니다. 리플리케이션 브리지는 게임에 대한 타입별 인터페이스를 제공하며 데이터에서 리플리케이션 프로토콜 및 리플리케이션 인스턴스 프로토콜을 생성할 수 있습니다. 또한, 리플리케이션 브리지는 리플리케이션 시스템의 요청에 따라 액터 및 기타 지원되는 타입과 같은 게임플레이 오브젝트의 인스턴스화도 담당합니다.
- 리플리케이션 상태 디스크립터 빌더(Replication State Descriptor Builder)
리플리케이션 상태 디스크립터 빌더는 리플렉션 데이터를 기반으로 지원되는 모든 타입에 대한 리플리케이션 상태 디스크립터를 빌드합니다.
- 리플리케이션 상태 디스크립터(Replication State Descriptor)
리플리케이션 상태 디스크립터는 다음을 포함한 리플리케이션 상태의 모든 측면을 설명합니다.
내부 및 외부 표현에 대한 메모리 레이아웃
각 상태 멤버의 시리얼라이즈 방법
요청된 작업
- 리플리케이션 상태(Replication State)
리플리케이션 상태는 네트워크를 통해 전송되거나 리플리케이트되어야 하는 데이터가 포함된 구조체입니다.
- 리플리케이션 시스템 내부(Replication System Internal)
리플리케이션 시스템 내부는 리플리케이션 시스템의 내부 인터페이스이며 내부 아이리스 코드에만 노출됩니다.
- 리플리케이션 시스템(Replication System)
리플리케이션 시스템은 게임플레이 코드에서 아이리스와 상호작용하기 위한 기본 인터페이스입니다.
- 리플리케이션 인스턴스 프로토콜(Replication Instance Protocol)
리플리케이션 인스턴스 프로토콜은 각 오브젝트 인스턴스에 대해 생성됩니다. 인스턴스에 대한 모든 리플리케이션 프래그먼트의 배열이며, 상태 데이터가 게임플레이 코드와 리플리케이션 시스템 간에 교환될 때마다 사용됩니다.
- 리플리케이션 프래그먼트(Replication Fragment)
리플리케이션 프래그먼트는 리플리케이션 상태의 소유 오브젝트입니다. 리플리케이션 시스템과 게임플레이 코드 간에 데이터를 주고받으려면 리플리케이션 상태가 소유 오브젝트에 바인딩되어야 합니다. 리플리케이션 프래그먼트는 이러한 리플리케이션 상태의 소유 오브젝트 역할을 합니다.
- 리플리케이션 프로토콜(Replication Protocol)
리플리케이션 프로토콜은 오브젝트의 데이터 리플리케이트 방식을 정의합니다. 리플리케이션 프로토콜은 리플리케이트될 데이터를 설명하는 모든 리플리케이션 상태의 배열입니다.
- 빠른 배열 리플리케이션 프래그먼트(Fast Array Replication Fragment)
빠른 배열 리플리케이션 프래그먼트는 빠른 배열 리플리케이션 상태의 소유 오브젝트입니다. 이는 빠른 배열을 위해 구현된 리플리케이션 프래그먼트입니다.
- 액터 리플리케이션 브리지(Actor Replication Bridge)
액터 리플리케이션 브리지는 리플리케이션 브리지 인터페이스를 구현합니다. 액터 리플리케이션 브리지는 액터 및 액터 컴포넌트로부터 리플리케이션 프로토콜 및 리플리케이션 인스턴스 프로토콜을 생성합니다. 또한 프로퍼티에서 상태 데이터를 폴링하고 필요한 레거시 콜백을 발행하는 코드도 구현합니다.
- 오브젝트 레퍼런스 캐시(Object Reference Cache)
오브젝트 레퍼런스 캐시는 리플리케이트되고 정적으로 명명된
UObject에 대한 레퍼런스를 저장합니다. 이는 NetGUID 캐시 및 클라이언트 패키지 맵과 비슷한 방식으로 작동합니다.- 체인지마스크(Changemask)
체인지마스크는 리플리케이트된 데이터의 더티 상태를 트래킹하는 데 사용되는 비트 배열입니다. 아이리스는 체인지마스크를 다음 두 가지 방식으로 사용합니다.
모든 리플리케이션 상태에 변경된 멤버를 캐시 친화적으로 로컬에서 트래킹하는 데 사용되는 인라인 스토리지가 있습니다.
리플리케이션 시스템이 리플리케이션 프로토콜의 모든 리플리케이션 상태에 대해 결합된 체인지마스크를 유지합니다.
- 타입 지정된 리플리케이션 상태(Typed Replication State)
타입 지정된 리플리케이션 상태는 모든 멤버와 내부 멤버에 대한 접근자가 있는 구조체에 기반한 리플리케이션 상태로, 각 멤버의 더티 상태를 트래킹하는 비트 필드와 함께 소유 넷 오브젝트의 ID를 저장합니다.
- 프로퍼티 리플리케이션 상태(Property Replication State)
프로퍼티 리플리케이션 상태는 현재 다이내믹 리플렉션 시스템과 상호작용하는 데 사용됩니다.
- 프로퍼티 리플리케이션 프래그먼트(Property Replication Fragment)
프로퍼티 리플리케이션 프래그먼트는 프로퍼티 리플리케이션 상태의 소유 오브젝트입니다.