2.3 KiB
2.3 KiB
title, type, tags, sources, last_updated
| title | type | tags | sources | last_updated | |
|---|---|---|---|---|---|
| RPC (Remote Procedure Call) | concept |
|
2026-04-26 |
Definition
远程过程调用(RPC)是 UE5 多人游戏中客户端与服务器之间进行通信的核心机制。客户端通过 RPC 向服务器发送请求(Server RPC),服务器通过 RPC 向客户端或所有客户端广播事件(Client RPC / NetMulticast)。
RPC Types
| 类型 | 方向 | 可靠性 | 用途 |
|---|---|---|---|
Server |
客户端 → 服务器 | Reliable/Unreliable | 客户端请求服务器执行操作 |
Client |
服务器 → 特定客户端 | Reliable/Unreliable | 服务器通知特定客户端 |
NetMulticast |
服务器 → 所有客户端 | Reliable/Unreliable | 服务器广播事件 |
Critical Rule: WithValidation
每个游戏影响型的 Server RPC 必须实现 _Validate() 函数。 缺失 _Validate() 构成安全漏洞,恶意客户端可发送非法请求。
// Server RPC 必须有 WithValidation
UFUNCTION(Server, Reliable, WithValidation)
void ServerRequestInteract(AActor* Target);
bool AMyActor::ServerRequestInteract_Validate(AActor* Target)
{
// 拒绝不可能的请求
if (!IsValid(Target)) return false;
float Distance = FVector::Dist(GetActorLocation(), Target->GetActorLocation());
return Distance < 200.f; // 最大交互距离
}
void AMyActor::ServerRequestInteract_Implementation(AActor* Target)
{
// 验证通过后安全执行
PerformInteraction(Target);
}
Reliability Guidelines
- Reliable:保证按序到达,用于游戏关键事件(伤害、得分、道具拾取)
- Unreliable:即发即忘,不保证到达,用于视觉效果、高频位置同步
- 绝不能将高频调用与可靠 RPC 混合——必须为高频数据创建独立的不可靠更新路径
Connection to Other Concepts
- Server-Authoritative Model — RPC 是服务器权威执行的游戏请求入口
- Actor Replication — 属性复制与 RPC 互补,复制状态、RPC 触发动作
- Network Prediction — 客户端在等待服务器 RPC 响应时进行本地预测
Relationship to Agent
UnrealMultiplayerArchitect 将 RPC 验证视为非妥协原则:"Every Server RPC needs a _Validate. No exceptions."
Aliases
- Remote Procedure Call
- Server RPC
- Client RPC
- NetMulticast