当前位置: 首页 > news >正文

车载通信与DDS标准解读系列(1):DDS-RPC

▎RPC & DDS-RPC

RPC:Remote Procedure Call,远程过程调用。

远程过程调用是一种进程间通信,它允许计算机程序在另一个地址空间中执行子程序,就好像用别人的东西像用自己的一样,常用于分布式系统。

远程过程调用常用的通信方式为Request/Reply,即请求方发送Request向另一个地方请求执行某程序,被请求方执行相关操作后,返回Reply给请求方。

DDS广泛应用于分布式系统中是以数据为中心的发布/订阅,消息是单向从Publisher发送到Subscriber的,但是大型分布式系统通常不止是一种通信方式,例如Request/Reply这种远程调用的通信方式,使用多种中间件框架通常会带来更加复杂,高成本等问题。因此,为了实现可移植性和互操作性,需要在DDS基础上开发Request/Reply通信的标准机制——DDS-RPC。

DDS-RPC是OMG组织在2017年4月推出的DDS扩展协议,目前仅有v1.0版本。

▎DDS-RPC架构

如何利用DDS的基础模块实现RPC中Request/Reply通信模式呢?

简单来说,由于DDS是单向传输Topic的,满足双向的Request/Reply通信只需要将单向的两个Topic关联起来,标记发送Reply的消息是回复哪个Request的。

在DDS-RPC架构中(如下图),Client端和Server端都具备一个Data Writer和Data Reader。Client端利用Data Writer写Call Topic(Request),Server的Data Reader可以读取Call Topic并做处理,之后调用Server的Data Writer写Return Topic(Reply),并由Client的Data Reader读取。Call Topic在总线上发送时会携带GUID+SN,当Return Topic发送时,也会携带相对应的Call Topic的GUID+SN,表明此条报文回复的是哪条请求。

在这里插入图片描述

▎服务映射

根据上面的DDS-RPC架构描述,DDS可以把Request和Reply对应的Call Topic和Return Topic联系起来实现RPC,那么RPC的服务如何映射到这两个Topic上呢?

DDS-RPC中定义了两种映射方式:Basic Service Mapping和Enhanced Service Mapping,这两种映射方式都需要对Topic名称和Topic Types进行映射。

Topic名称

三种指定Topic名称方式:

  • 默认Topic名称:<topic_name>::=<interface_name>““<service_name>””[“Request”|“Reply”]|<user_def_alpha_num>
  • 注释的方式指定Request Topic和Reply Topic
  • 调用相关函数指定Topic名称

Topic Types

- Basic Service Mapping

在这里插入图片描述
在这里插入图片描述

  • Enhanced Service Mapping

在这里插入图片描述
在这里插入图片描述

▎服务发现

在DDSI-RTPS中,Reader和Writer需要先完成服务发现,才能进一步发送定义的Topic数据,DDS-RPC中的Call Topic和Return Topic对应的Reader和Writer也需要先完成服务实现,这个过程依赖RTPS对服务发现互操作性的要求。

Basic Service Mapping

依赖DDSI-RTPS内置Topic进行服务发现,可能会导致丢失Reply。

Enhanced Service Mapping

依赖DDSI-RTPS内置Topic进行服务发现,但是对Topic数据进行了扩展,能保证Client发送Request之前,Client的Reader能够与Server的Writer完成服务发现。

▎小结

DDS-RPC定义了在DDS基础上实现RPC通信的标准机制:用两个Topic分别对应RPC机制中的Request和Reply,并进行标记使得Reply与Request绑定,对于这两个Topic与RPC服务的映射也给出了要求。DDS-RPC结合了DDS的数据分发功能和RPC的远程调用功能,支持QoS设置,也满足了互操作性,丰富了DDS的使用场景。

相关文章:

车载通信与DDS标准解读系列(1):DDS-RPC

▎RPC & DDS-RPC RPC&#xff1a;Remote Procedure Call&#xff0c;远程过程调用。 远程过程调用是一种进程间通信&#xff0c;它允许计算机程序在另一个地址空间中执行子程序&#xff0c;就好像用别人的东西像用自己的一样&#xff0c;常用于分布式系统。 远程过程调用…...

通过构造树形结构介绍map的用法

构造TreeSelect树形结构&#xff1a; 当我们拿到的数据与我们要用的数据不一致时&#xff0c;就要改造成自己想要的数据结构。 后端拿到的数据结构&#xff1a; public class TPMGroup{public string DepName { get; set; }public List<staff> TPMList { get; set; }pu…...

代码随想录算法训练营Day 53 || 1143.最长公共子序列、1035.不相交的线、53. 最大子序和

1143.最长公共子序列 力扣题目链接 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08;也可以不删除任何…...

Oracle JDBC数据库驱动程序介绍

Maven Central上所有Oracle JDBC数据库驱动程序 现在不仅可以在Maven Central上使用甲骨文数据库最新版本&#xff0c;而且还可以获得所有受支持的Oracle JDBC驱动程序发行版&#xff0c;包括19.3.0.0、18.3.0.0、12.2.0.1和11.2.0.4。从现在开始&#xff0c;Maven Central确实…...

scipy实现单因素方差分析

经典例题 某校高二年级共有四个班&#xff0c;采用四种不同的教学方法进行数学教学&#xff0c;为了比较这四种教学法的效果是否存在明显的差异&#xff0c;期末统考后&#xff0c;从这四个班中各抽取 5 名考生的成绩&#xff0c;如下所示。 班级 一班 二班 三班 四班 …...

深度学习实战59-NLP最核心的模型:transformer的搭建与训练过程详解,手把手搭建与跑通

大家好,我是微学AI,今天给大家介绍一下深度学习实战59-NLP最核心的模型:transformer的搭建与训练过程详解,手把手搭建与跑通。transformer是一种基于自注意力机制的深度学习模型,由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初被设计用来处理序…...

一阶滤波器(一阶巴特沃斯滤波器)

连续传递函数G(s) 离散传递函数G(z) 转换为差分方程形式 一阶巴特沃斯滤波器Filter Designer参数设计&#xff1a;参考之前的博客Matlab的Filter Designer工具设计二阶低通滤波器 设计采样频率100Hz&#xff0c;截止频率20Hz。 注意&#xff1a;设计参数使用在离散系统中&…...

.net core中前端vue HTML5 History 刷新页面404问题

放到启动的应用程序的最后面 app.Run(async (context) > {context.Response.ContentType "text/html";await context.Response.SendFileAsync(Path.Combine(env.WebRootPath, "index.html")); });https://blog.csdn.net/lee576/article/details/88355…...

【152.乘积最大子数组】

目录 一、题目描述二、算法原理三、代码实现 一、题目描述 二、算法原理 三、代码实现 class Solution { public:int maxProduct(vector<int>& nums) {int nnums.size();vector<int> f(n);vector<int> g(n);f[0]g[0]nums[0];int retnums[0];for(int i1;…...

如何开发OA系统场景的系统架构

1.开发OA系统场景的系统架构 针对开发OA系统的场景&#xff0c;以下是一个简单的系统架构示例&#xff0c;包括前端、后端和数据库三个基本部分&#xff1a; 前端&#xff1a; 使用React框架进行前端开发&#xff0c;构建用户界面和交互逻辑。前端模块包括日程管理模块、文档管…...

spring boot 集成 RedisSearch 和 RedisJSON

1. 准备工作 环境说明 java 8&#xff1b;redis7.2.2&#xff0c;redis集成RedisSearch、redisJson 模块&#xff1b;spring boot 2.5在执行 redis 命令&#xff0c; 或者监控 程序执行的redis 指令时&#xff0c;可以采用 redisinsight查看&#xff0c;下载地址。 背景说明 需…...

【Kotlin精简】第8章 协程

1 简介 Kotlin 中的协程提供了一种全新处理并发的方式&#xff0c;您可以在 Android 平台上使用它来简化异步执行的代码。协程是从 Kotlin 1.3 版本开始引入&#xff0c;但这一概念在编程世界诞生的黎明之际就有了&#xff0c;最早使用协程的编程语言可以追溯到 1967 年的 Sim…...

【MATLAB源码-第79期】基于蚯蚓优化算法(EOA)的栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 蚯蚓优化算法&#xff08;Earthworm Optimisation Algorithm, EOA&#xff09;是一种启发式算法&#xff0c;灵感来源于蚯蚓在自然界中的行为模式。蚯蚓优化算法主要模仿了蚯蚓在寻找食物和逃避天敌时的行为策略。以下是蚯蚓…...

RPC实现简单解析

RPC是什么&#xff0c;先摘取一段解释&#xff1a; RPC全称为远程过程调用&#xff08;Remote Procedure Call&#xff09;&#xff0c;它是一种计算机通信协议&#xff0c;允许一个计算机程序调用另一个计算机上的子程序&#xff0c;而无需了解底层网络细节。通过RPC&#xff…...

【Ubuntu】Ubuntu20.04下安装视频播放器vlc和录屏软件ssr

【Ubuntu】Ubuntu20.04下安装视频播放器vlc和录屏软件ssr 文章目录 【Ubuntu】Ubuntu20.04下安装视频播放器vlc和录屏软件ssr1. 安装视频播放器vlc2. 安装录屏软件ssr 1. 安装视频播放器vlc sudo apt-get install vlcvlc是一款比较简洁的视频播放器&#xff0c;如下所示 2. 安…...

WMS仓储管理系统与TMS系统整合后的优势

随着全球化的加速和供应链网络的日益复杂&#xff0c;仓库和运输成为企业运营中的两个关键环节。为了更高效地管理这两个环节&#xff0c;许多企业开始探索将WMS仓储管理系统和TMS运输管理系统整合的可能性。这种整合不仅可以提升仓库流程的可见性&#xff0c;还有助于改善调度…...

测试的专用

测试...

sqli-labs(Less-4) extractvalue闯关

extractvalue() - Xpath类型函数 1. 确认注入点如何闭合的方式 2. 爆出当前数据库的库名 http://127.0.0.1/sqlilabs/Less-4/?id1") and extractvalue(1,concat(~,(select database()))) --3. 爆出当前数据库的表名 http://127.0.0.1/sqlilabs/Less-4/?id1") …...

Kafka简单汇总

Kafka的结构图 多个Parttion共同组成这个topic的所有消息。每个consumer都属于一个consumer group&#xff0c;每条消息只能被consumer group中的一个Consumer消费&#xff0c; 但可以被多个consumer group消费。即组间数据是共享的&#xff0c;组内数据是竞争的。二、消费模型…...

任务交给谁?委派模式告诉你最佳选择!

文章目录 一、概念二、角色三、代码实现四、委派模式在源码中的体现五、委派模式的优缺点优点缺点 一、概念 委派模式&#xff08;Delegate Pattern)又叫委托模式&#xff0c;是一种面向对象的设计模式。委派模式是一种行为模式&#xff0c;不属于GOF23种设计模式之中基本作用…...

电子设计竞赛必备:RC、运放、TTL信号处理电路实战指南(附避坑技巧)

电子设计竞赛信号处理电路实战&#xff1a;从RC滤波到TTL脉冲的进阶技巧 第一次参加电子设计竞赛时&#xff0c;我在信号处理环节浪费了整整两天时间——原本清晰的方波经过电路后变得面目全非&#xff0c;放大后的信号带着令人头疼的振荡&#xff0c;而评委要求的脉冲宽度总是…...

当触控板遇见鼠标:一场被重构的滚动革命

当触控板遇见鼠标&#xff1a;一场被重构的滚动革命 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 在MacBook Pro的触控板上轻扫手指&#xff0c;网页随指尖方向自然滚动&#…...

遗传算法(GA)调参实战:以Scikit-learn模型为例,手把手教你自动化超参数搜索

遗传算法调参实战&#xff1a;用进化思维优化Scikit-learn模型超参数 当我们在机器学习项目中反复调整随机森林的max_depth或XGBoost的learning_rate时&#xff0c;是否想过自然界早已提供了更优雅的解决方案&#xff1f;生物进化经过数十亿年锤炼的优化机制&#xff0c;正以遗…...

告别Keil5刺眼白屏!保姆级教程教你配置VS Code同款暗黑主题(附3套配色方案)

Keil5暗黑主题终极改造指南&#xff1a;从护眼原理到深度定制 凌晨三点的实验室里&#xff0c;显示屏刺眼的白光让我的眼球开始灼烧般疼痛——这是许多嵌入式开发者共同的噩梦。Keil5作为单片机开发的主流工具&#xff0c;其默认的亮色主题在长时间编码时带来的视觉负担远超你的…...

Android项目中的Gradle文件详解:从基础配置到高级技巧

Android项目中的Gradle文件详解&#xff1a;从基础配置到高级技巧 在Android开发的世界里&#xff0c;Gradle文件就像是一个项目的"大脑"&#xff0c;它控制着构建过程的方方面面。对于有一定经验的Android开发者来说&#xff0c;深入理解Gradle文件的配置不仅能够提…...

Qwen3-0.6B-FP8与STM32开发联动:生成嵌入式系统控制逻辑伪代码

Qwen3-0.6B-FP8与STM32开发联动&#xff1a;生成嵌入式系统控制逻辑伪代码 1. 引言 如果你是一位嵌入式开发者&#xff0c;或者正在学习STM32&#xff0c;下面这个场景你一定不陌生&#xff1a;拿到一个传感器模块&#xff0c;比如温湿度传感器&#xff0c;想用它来控制一个风…...

HumanoidVerse深度解析:如何通过多模拟器框架实现人形机器人sim2real高效训练

1. HumanoidVerse框架概览&#xff1a;多模拟器支持与模块化设计 HumanoidVerse是卡耐基梅隆大学(CMU)推出的开源框架&#xff0c;专门针对人形机器人的sim2real训练需求。这个框架最大的特点在于其多模拟器支持架构&#xff0c;能够无缝对接IsaacGym、IsaacSim和Genesis三种主…...

Python 3.14 JIT架构深度拆解(含官方未发布IR层流程图+Hot Code Path决策树)

第一章&#xff1a;Python 3.14 JIT编译器演进背景与设计哲学Python 长期以来以解释执行和动态灵活性著称&#xff0c;但性能瓶颈在数值计算、实时服务与高吞吐系统中日益凸显。CPython 解释器的字节码执行模型虽稳定可靠&#xff0c;却难以突破单线程 GIL 与逐指令解释带来的固…...

PXE装机避坑大全:从TFTP根目录设置到Kickstart无人值守的13个常见错误修复

PXE装机避坑大全&#xff1a;从TFTP根目录设置到Kickstart无人值守的13个常见错误修复 在企业级IT运维中&#xff0c;PXE&#xff08;预启动执行环境&#xff09;网络装机技术因其高效、自动化的特点&#xff0c;已成为服务器批量部署的标配方案。但看似简单的PXE部署流程背后&…...

Windows 10终极指南:免费开启HEIC缩略图预览功能

Windows 10终极指南&#xff1a;免费开启HEIC缩略图预览功能 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 还在为iPhone拍摄的照片在…...