UE4.27, 揣摩源码, 网络同步 (三) RPC

news/2025/1/11 0:03:14/文章来源:https://www.cnblogs.com/chenxuanzuo/p/18648610

6.  RPC

  6.1.  RPC是网络同步的一部分,全称Remote Procedure Call。属性同步只能从服务端向客户端单向传递信息,而RPC可以双向传递消息
  6.2.  类型

    6.2.1.  Server调用,Actor所属的Client执行
    6.2.2.  Client调用,Server执行
    6.2.3.  Server调用,Server和所有Client执行

    6.2.4.  定义示例

       UFUNCTION(Client)

        void ClientRPCFunction();

       UFUNCTION(Server)

        void ServerRPCFunction();

       UFUNCTION(NetMulticast)

        void MulticastRPCFunction();

  6.3.  调用堆栈

    UObject::ProcessEvent

      AActor::GetFunctionCallspace

       检查函数调用域是否为remote,有趣的是,它返回值按值取与来进行判断,这是因为该函数内部返回的情形并不是单纯的某枚举值,存在返回枚举值A | 枚举值B的状况。

       我个人认为既然允许位运算参与逻辑判断,枚举的定义应该是形如0b的,但是UE却是0x定义的,对此表示疑惑

       这个枚举定义形式是相当典型的,命名空间内定义Type的实际枚举,配合一个内联函数返回宽字符头来方便转化枚举值为字符串。这显然是调试考量

        AActor::CallRemoteFunction

          UNetDriver::ProcessRemoteFunction

            // 寻找连接,如果需要,则遍历连接

              // 如果是多播

              InternalProcessRemoteFunctionPrivate

              // 如果不是多播

              InternalProcessRemoteFunction 调用 InternalProcessRemoteFunctionPrivate

              我们可以观察到,如果不是多播,进行rpc的条件是该actor得有连接NetConnection 这就是我们配置actor需要考察owner的原因之一

              没有owner,或者说owner链条不到PlayerController,就找不到connection,这一步是过不了的

 

              进一步的,我们可以观察到这俩函数的区别:形参接受的参数connection不同,这个自然,多播需要分别遍历connection,

              还有就是parameter的处理区别,在多播的时候会构造一个共享的序列化,其内部是由 FLayout成员中bool变量维护的 只执行一次的函数体

                 InternalProcessRemoteFunctionPrivate

                检查channel是否创建,没创建就创建一个

                (居然还有第一人称actor的注释,哈哈哈哈哈)

 

                  ProcessRemoteFunctionForChannelPrivate

                    SendPropertiesForRPC

                      底层send

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Discharging Method

Firstly, we introduce Euler Formula.When we use Euler formula, we often need its transformations.Secondly, we design some discharging rules based on Euler Formula.Finally, we give the principle of Discharging Method in proofs.

2024.12.16(SpringBoot知识点总结)

4.2 配置文件与配置类的属性映射方式 4.2.1 使用注解@Value映射 我们可以通过@Value注解将配置文件中的值映射到一个Spring管理的Bean的字段上 例如: application.properties配置如下: person: name: zhangsan age: 18 1 2 3 或者,application.yml配置如下: person: name: …

2024.12.7(SpringBoot知识点总结)

2.2.2 SpringBoot代码解析 @SpringBootApplication:标注SpringBoot的启动类,该注解具备多种功能(后面详细剖析) SpringApplication.run(MySpringBootApplication.class) 代表运行SpringBoot的启动类,参数为SpringBoot启动类的字节码对象 2.2.3 SpringBoot工程热部署 我们在…

python SQLAlchemy ORM——从零开始学习 04 如何过滤(筛选)数据库中的数据

04 如何过滤(筛选)数据库中的数据 从数据库中获筛选数据主要应用以下几个接口:filter、filter_by、以及 where。前两个在 02已经展开说过,先展开说where接口 前情提要:依赖03提及的model【本质上就是数据库的链接,有可忽视】 当前的数据库表内容如下,仅作例子,不相同根…

[Linux] 包管理器之【APT】

序续:《[Linux] Linux中安装软件的方式? - 博客园/千千寰宇》 《[Linux] 包管理器之综述【RPM/DPKG|YUM/APT】 - 博客园/千千寰宇》概述:包管理器 APTAPT:Advanced Packaging Tool(现名)解释: Advanced Packaging Tool(apt),作为 原始包管理器DPKG的前端包管理工具(…

2024.11.7(spring boot 创建数据库)

然后搭建四层架构 controller,mapper,pojo,service创建mapper的映射文件

2024.11.8(spring boot创建数据库)

三、连接数据库 1.编写文件 在resources包下找到application.properties,将如下代码写入: spring.datasource.username=root spring.datasource.password=admin spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&cha…

2024.11.9(spring boot创建数据库)

pojo层实体类里的属性要与数据表一一对应;查询所有用户是要返回多个User,所以用List; Service层先用@Autowired注入userMapper; 然后声明方法;

django python manage.py报错TimeoutError: [WinError 10060] A connection attempt failed

diango python manage.py报错 TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 加个代理即可

4. gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器

原文地址: gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器 gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器搭建环境: ubuntu: 20.04ros: Noneticsensor: robotiq_ft300gripper: robotiq_2f_140_gripperUR: UR3reasense: D435i 通过下面几篇博…

tomcat9.0下载安装及配置图文教程

下载 官网:http://tomcat.apache.org/ 选择下载64-Bit Windows zip(Win64)2.解压到任意一个盘,如,D:\apache-tomcat-9.0.98 3.设置环境变量 CATALINA_HOME:D:\apache-tomcat-9.0.98 找到系统变量Path,添加:%CATALINA_HOME%\bin验证是否配置成功 进入Windows命令行窗口,…

3. ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境

原文地址: ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境 ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境搭建环境: ubuntu: 20.04ros: Noneticsensor: robotiq_ft300gripper: robotiq_2f_140_gripperUR: U…