老弯曼巴UE5头像
关注

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 里写方法,它只存在与服务器权威端。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/m0_64217692/article/details/162281933

文章来源转载

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--