데이터의 성격에 따라 사용 방식을 결정
Replicateion(복제, 단방향)
서버의 중요한 상태 데이터(레벨, 체력 등)를 클라이언트에 지속적으로 동기화 하여 모든 클라이언트가 최신 정보를 공유할수 있도록 해줌.
지정한 변수들은 엔진이 자동으로 클라이언트에 복제
Replication Conditions
최적화 기법으로 필요한 상황(OND_OwnerOnly, COND_InitialOnly 등)에서만 데이터를 전송하여 네트워크 부하를 줄임
델타 업데이트를 통해 전체 데이터 대신 변경된 부분만 전송.
간단 예시
플레이어 레벨업 -> 서버의 PlayerState에 있는 레벨 값이 업데이트 -> Replication을 통해 모든 클라이언트에 그 값이 자동으로 전달
RPC(원격 프로시저 호출, 양방향)
단발성 이벤트(공격, 스킬 사용 등)을 처리하기 위하여 클라이언트와 서버 간에 함수 호출을 통해 데이터를 전달
이벤트 발생 시 필요한 함수만 호출하여 데이터를 전달하는 명시적 호출방식.
Server RPC : 클라이언트 -> 서버 호출
Multicast RPC : 서버 -> 모든 클라이언트로 이벤트 전송
Reliable RPC
호출이 반드시 서버나 클라이언트에 도달하도록 보장함으로써 호출이 누락되면 문제가 생기는 경우 사용 (레벨업, 중요 아이템 습득)
빈번하게 사용시 네트워크 부하가 커지고 호출 지연이 발생될 수 있음 (기본 Reliable 버퍼 한도는 256개 Packet으로 부하가 걸리거나 하는 상황 발생시 꽉차서 클라이언트 접속이 끊길 수 있음)
Unreliable RPC
호출이 전송되지만 네트워크 상황에 따라 도달하지 않을 수 있어 잦은 업데이트가 필요하거나 호출이 누락되어도 큰 영향을 주지 않는 경우 사용 (이펙트 등)
기본적으론 Unreliable로 설정하고 필요한 경우 Reliable로 바꾸기(언리얼에서 설정을 안할 시 기본값도 Unrealiable)
간단 예시
공격 버튼을 누름 -> 클라이언트에서 서버로 공격 요청 전송 -> 서버가 Multicast RPC를 통해 모든 클라이언트에 공격 애니매이션, 이펙트 등을 전달