RPC (Remote Procedure Call)
네트워크로 연결된 다른 컴퓨터에 있는 함수나 프로시저를 마치 로컬에서 호출하듯이 실행할 수 있게 해주는 통신 기술.
사용법
함수를 RPC로 선언하려면 Server, Client, NetMulticast 키워드를 붙여줘야한다.
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 |