개발일지공부아이디어
    • 6월
    • 5월
    • 4월
    • 3월
    • 2월
    • 1월
  • 04

    26. 6. 4.

  • 01

    26. 6. 1.

로딩 중...

2026. 6. 4.

8. RPC 기초

RPC란?

  • RPC (Remote Procedure Call) 는 로컬에서 호출되지만 (호출하는 머신과는) 다른 머신에서 원격 실행되는 함수
  • 원격 컴퓨터에 있는 함수를 호출할 수 있는 통신 프로토콜
  • 네트웍 멀티플레이에서 서버-클라이언트 간 빠르게 행동을 명령하고 정보를 주고받는데 사용
  • 언리얼 엔진에서 클라이언트→서버 통신하는 유일한 수단.

RPC의 주요 용도:

  • 장식이나 휘발성인 비신뢰성 게임플레이 이벤트를 위한 기능
  • 사운드 재생, 파티클 스폰, 일시적 효과를 포함
  • 휘발적이지 않은 것들은 프로퍼티 리플리케이션을 써야함

종류:

UFUNCTION(Client)void ClientRPC();UFUNCTION(Server)void ServerRPC();UFUNCTION(NetMulticast)void MulticastRPC();

RPC 의 정상 작동을 위해 충족시켜야 하는 요건:

  1. Actor 에서 호출되어야 합니다.
  2. Actor 는 빈드시 replicated 여야 합니다.
  3. 서버에서 호출되고 클라이언트에서 실행되는 RPC 의 경우, 해당 Actor 를 실제 소유하고 있는 클라이언트에서만 함수가 실행됩니다.
  4. 클라이언트에서 호출되고 서버에서 실행되는 RPC 의 경우, 클라이언트는 RPC 가 호출되는 Actor 를 소유해야 합니다.
  5. Multicast RPC 는 예외입니다:
    • 서버에서 호출되는 경우, 서버에서는 로컬에서 실행될 뿐만 아니라 현재 연결된 모든 클라이언트에서도 실행됩니다.
    • 클라이언트에서 호출되는 경우, 로컬에서만 실행되며, 서버에서는 실행되지 않습니다.
    • 현재 멀티캐스트 이벤트에 대해 단순한 스로틀 조절 메카니즘이 있습니다. 멀티캐스트 함수는 주어진 액터의 네트워크 업데이트 기간동안 두 번 이상 리플리케이트되지 않습니다. 장기적으로 크로스 채널 트래픽 관리 및 스로틀 조절 지원을 개선시킬 계획입니다.

RPC의 신뢰성

Metadata SpecifierDescriptionOrder of Execution
ReliableThis RPC is re-sent until it is acknowledged by the receiver. All subsequent RPC executions are suspended until this RPC is acknowledged.Guaranteed in order.
UnreliableThis RPC is not executed if the packet is dropped.No order guarantee.
Reliable이어도 TCP인건 아님. 대부분 UDP로 구현돼있음. Reliable은 무거우므로(수신했는지 확인해야하기 때문) 남용하면 안됨

Client RPC 개요

  • 서버에서 클라이언트로 호출하는 RPC
  • 특정 클라이언트에만 명령을 보낼 수 있음
  • 서버에서 명령을 보낼 클라이언트의 커넥션을 소유한 액터를 사용해야함(AActor::GetNetConnection )

Server RPC 개요

  • 클라이언트에서 서버로 호출하는 RPC
  • 언리얼에서 유일하게 클라이언트가 서버로 요청할 수 있는 통로
  • 서버쪽에서 클라이언트의 명령을 '검증'할 함수를 구현해야 함
  • Client RPC와 동일하게 서버와의 커넥션을 소유한 액터를 사용해야함

NetMulticast RPC 개요

  • 서버를 포함해 모든 플레이어에게 명령을 보내는 RPC
  • 프로퍼티 리플리케이션과 유사하게 연관성 기반으로 동작함(커넥션 소유하지 않아도 동작)
  • 프로퍼티 리플리케이션과는 다른 용도로 사용함

RPC 사용 주의점

  • Client, NetMulticast는 서버에서만 호출
  • Server는 클라이언트에서 호출하지만 플레이어로 참여하는 리슨서버면 서버에서도 호출 가능(리슨서버 호스트도 서버이자 동시에 클라이언트이므로)
  • Client, Server는 오너십을 가지고 있는 액터에서 호출
    • Controller 오너십 확인 = IsLocalController()
    • Pawn 오너십 확인 = IsLocallyControlled()
  • Tick 및 빈번하게 호출되는 함수에 Reliable RPC 사용 자제
  • NetMulticast RPC의 잦은 사용은 네트웍 부하를 가중시키므로 신중할 것
  • 게임 플레이 및 액터 상태에 영향을 미칠 경우 RPC보단 프로퍼티 리플리케이션이 더 나음

Property Replication vs. NetMulticast RPC 유사점

  • 서버와 모든 클라이언트의 지정된 함수 호출 가능
  • 지정한 데이터 '전송' 보장 가능
  • 액터의 오너십과 무관하게 연관성만 있으면 동작함

차이점

  • Property Replication으로 설정한 데이터는 반드시 클라이언트에 동기화됨(나중에 접속하더라도)
  • NetMulticast RPC는 호출한 타이밍에 클라이언트가 없으면 데이터를 받을 길이 없음(수신 보장 x)
  • 네트웍 상태에 따라 RPC는 유실될 수 있음
왼쪽 화살표다음 글이 없습니다.