게임 개발 공부/네트워크

RPC

Vetenir 2025. 3. 27. 21:57

RPC (Remote Procedure Call)

네트워크로 연결된 다른 컴퓨터에 있는 함수나 프로시저를 마치 로컬에서 호출하듯이 실행할 수 있게 해주는 통신 기술.

 

사용법

함수를 RPC로 선언하려면 ServerClientNetMulticast 키워드를 붙여줘야한다.

 

Client 호출   Server 실행

	UFUNCTION( Server )
	void ServerRPCFunction();

 

Server 호출 Client 실행

	UFUNCTION( Client )
	void ClientRPCFunction();

 

Server 호출  모든 Server, Client 실행

	UFUNCTION( NetMulticast )
	void MulticastRPCFunction();
  • 멀티캐스트 RPC 는 클라이언트에서도 호출 가능하지만, 이 경우 로컬에서만 실행됩니다.

 

신뢰성

기본적으로 RPC 는 Unreliable

RPC 호출이 원격 머신에서 확실히 실행되도록 하기 위해서는 Reliable 키워드 사용.

	UFUNCTION( Client, Reliable )
	void ClientRPCFunction();

 

블루프린트

Blueprint C++
Not Replicated (키워드 없음)
Multicast NetMulticast
Run on Server Server
Run on Owning Client Client

 

인증

  • 악성 데이터/입력 감지를 위한 관문 역할을 위해 RPC 에 인증(validation) 함수를 추가하는 기능.
  • RPC 에 대한 인증 함수가 악성 파라미터를 감지한 경우, 해당 RPC 를 호출한 클라이언트/서버 연결을 끊도록 시스템에 알린다는 개념.

.h

    UFUNCTION(Server, Reliable, WithValidation)
    void ServerProcessMessage(const FString& Message);
    bool ServerProcessMessage_Validate(const FString& Message);
    void ServerProcessMessage_Implementation(const FString& Message);

 

.cpp

bool ABaseballPlayerController::ServerProcessMessage_Validate(const FString& Message)
{
    // 기본 검증
    return true;
}

void ABaseballPlayerController::ServerProcessMessage_Implementation(const FString& Message)
{
    // 실제 로직 → 서버 측에서 메시지 처리
    ABaseballGameMode* GameMode = Cast<ABaseballGameMode>(GetWorld()->GetAuthGameMode());
    if (GameMode)
    {
        GameMode->ProcessChatMessage(this, Message);
    }
}
  • ServerProcessMessage_Implementation 은 서버의 게임모드 주요 로직 중 하나인 ProcessChatMessage() 함수 실행.

 

 

참고

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/rpcs?application_version=4.27

'게임 개발 공부 > 네트워크' 카테고리의 다른 글

콜백 함수 - UPROPERTY(ReplicatedUsing)  (0) 2025.04.10
Broadcast  (0) 2025.03.26
Multiplayer Framework Replication과 RPC  (0) 2025.03.25
Player State vs Game State  (0) 2025.03.19