UE5 客户端 需要的网络同步概念总结(3 )-事件同步 RPC 以及三种调用方式

一.RPC概念

远端 过程 调用,RPC这个概念并不是只在UE里有,纯C++ 也有。只不过为了保障可靠性纯C++里用的是TCP。

大部分传统 RPC 框架确实是基于 TCP 的,但不能简单说"传统 RPC = TCP"。

复制代码
传统RPC
    ↓
通常使用可靠传输层
    ↓
TCP(最常见)

例如:

  • gRPC → HTTP/2 → TCP
  • Apache Thrift → 通常 TCP
  • Dubbo → TCP
  • brpc → TCP

为什么传统 RPC 喜欢 TCP?

因为业务系统最关心的是:

复制代码
数据不能丢
数据不能乱序
数据必须完整

互联网公司常说的 RPC(gRPC、Thrift、brpc)本质上大多数都是:

后端:

复制代码
客户端
 ↓
RPC
 ↓
服务A
 ↓
RPC
 ↓
服务B
 ↓
RPC
 ↓
数据库

整个系统围绕 RPC 运转,RPC本身就是主角。

让程序员感觉像在调用本地函数,但实际上是在调用远程机器上的函数。

而在UE 里,TCP 太慢了,为了实时性通过UDP的一些操作来实现可靠的远程调用。UE DS 便是设计的,区别非常大。

UE 网络架构其实是:

复制代码
客户端输入
 ↓
RPC
 ↓
服务器修改状态
 ↓
Replication
 ↓
客户端同步状态

RPC 只是入口。真正负责同步游戏世界状态的是 Replication 系统,而不是 RPC 系统。

总之,RPC 的核心并不是 TCP,而是"可靠的请求-响应模型"。历史上最方便实现这一点的传输层就是 TCP,但技术进步也有其他方式保障可靠。UE为了实时性采用UDP。

二.UE 里的分类

其实很简单,如果看了之前的文章UE 客户端 需要的网络同步概念总结(2)-CSDN博客。大概能猜出来,是 1.客户端呼叫服务器执行 2.服务端呼叫指定客户端执行 3.服务器呼叫所有客户端执行

三.直接上案例

在蓝图里就时 Event 里有这几个对应的选项。

1.测试首先在角色里,CallServerDoSomething里新增事件CallSeverDoSomething

设置这个事件,只在服务器上可靠执行。RunOnSever

按下1测试,确实只在这个事件,才能拿到GameMode。是在服务器上执行的

根据打印日志,确实只在服务器上执行。

2.服务器端 呼叫 客户端 ,在GameMode 里写方法,它只存在与服务器权威端。

相关推荐
昌原的儿子LEO1 小时前
IMX6ULL 时钟系统与 EPIT/GPT 定时器原理与配置
arm开发·学习
captain3761 小时前
HTTP(2)
java·网络·http·java-ee
万联WANFLOW1 小时前
94%成交引爆美区:TikTok直播电商迎来高客单价时代
网络·业界资讯
xiaoye-duck1 小时前
《Linux 网络编程》深入理解数据链路层:从MAC帧到ARP协议的底层原理详解
linux·网络
开开心心就好1 小时前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
乌暮1 小时前
Java 抽象类与接口详解:半成品图纸 vs 能力合同
java·开发语言·后端·学习
All for pursuit.1 小时前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
01二进制代码漫游日记1 小时前
C++之类和对象(上)02
c++
AAA代码批发商1 小时前
Days 47 IMX6ULL 裸机开发:按键轮询实验 + 外部中断原理剖析(上)
笔记·学习·imx6ull·裸机开发·#arm中断