Unreal Engine - RPC (Remote Procedure Call)

다른 작성 글에서 레플리케이션을 소개했으며,

요약하면 액터를 스폰할 때, 레플리케이션은 서버가 액터 스폰 시 다른 클라이언트에게도 스폰 시켜야 한다. 서버가 네트워크로 패킷을 복제 후 전파하여 모든 클라이언트가 패킷을 받아 액터를 스폰하는 연출한다.

레플리케이션 복제 대상

  • Actor 클래스
  • 컴포넌트 클래스
  • 변수
  • 기타 등등

또한, 레플리케이션의 양방향 통신이 아니다.
Server -> Client 네트워크 일방향 통신만 가능하다.

레플리케이션 문제

  • Client가 Server에게 요청할 수 없다.
  • 복제 대상이 되는 항목이 도중에 단일로 사용할 수 없음. 패킷 전송 과정이 무거움

Remote Procedure Call

원격 함수 호출은 원격에 있는 함수를 강제로 호출하는 기능이다.
주로 클라이언트가 서버에게 함수 요청을 할 때 사용된다.

전통적인 RPG에서 클라이언트가 서버에게 호출이 필요한 경우, 클라이언트는 패킷을 생성해 안에 스킬, 대상, 숫자 등을 담아 서버에 발송한다. 수신받은 서버는 패킷을 열어 해당 함수를 호출이 필요했다. 이 전통적인 방식은 코드 작성과 과정이 매우 복잡하여 개발성이 떨어진다는 단점이 있다.

언리얼 엔진에서는 전통적인 네트워크 과정과 다르게 클라이언트가 서버에서 실행해라고 체크해주기만 해도 언리얼 내부에서는 알아서 네트워크 통신하고 서버에서 바로 그 함수를 실행할 수 있도록 한다.


RPC 통신 대상

RPC 기능은 레플리케이션과 다르게 Client가 Server에게 함수를 실행해라고 할 뿐 아니라. Server가 Client로 함수 실행하라고 명령할 수 있다. 그 뿐 아니라 Multicast로 중요한 공지가 있는 경우 서버가 다수의 클라이언트에게 함수 실행하라고 명령할 수 있다.

  • Run on Server
    • 클라이언트가 서버에게 함수 호출을 명령함
  • Run on owning Client
    • 서버가 클라이언트에게 함수 호출을 명령함
  • Multicast
    • 다수의 클라이언트로 함수 호출을 명령함