fastdds router-3.开始
1. 项目概述
DDS路由器是由eProsima开发的跨平台非图形化应用程序,由Fast DDS提供支持,允许创建一个通信桥,连接两个DDS网络,否则将被隔离。DDS路由器的主要用途是通信两个物理或虚拟分离的DDS网络,这些网络属于不同的LAN,允许每个网络的实体模糊地发布和订阅本地和远程主题。
DDS路由器是一个内部运行参与者的应用程序,参与者是DDS域参与者的抽象。这些参与者中的每一个都是一个通信接口,是特定DDS网络配置的“门”。这些参与者允许应用程序同时连接到不同的DDS网络。每当这些参与者中的一个从其所连接的DDS网络接收到消息时,他们将通过其他参与者转发数据和消息源。DDS路由器配置及其操作主题取决于初始DDS路由器配置。
以下模式表示DDS路由器本地用例。此场景显示了由于传输协议(UDP、TCP等)、发现协议(简单、发现服务器等)或每个DDS实体使用的DDS域Id而彼此隔离的不同DDS网络。将DDS路由器配置为具有4个不同的参与者,每个参与者配置为一个独立的DDS网络,将在内部创建4个参与者。到达其中一个参与者的所有数据将通过其他参与者转发,从而允许所有机器彼此连接,而不受其不同配置的影响。该数据传输将在不复制数据的情况下完成,因为所有参与者将共享分配数据的指针,成功实现零复制通信机制。

1.1. Wan通信
要实现在不同LAN中工作的两个网络的WAN通信,需要在每个LAN上运行DDS路由器应用程序。部署的DDS路由器将通过WAN使用DDS相互通信,并将在LAN中接收的每个消息路由到远程DDS路由器。一旦远程路由器接收到数据,它就会将数据传输到所连接的本地网络。这样,两个DDS网络的行为就好像它们属于同一个LAN。
另一个重要特征是WAN通信不限于一对DDS路由器。可以使用eProsima发现服务器发现机制(非多播网络上的动态发现)来执行WAN通信。因此,连接到相同发现服务器的任何DDS路由器都将作为标准DDS节点工作,发布和订阅共享的DDS主题。这允许创建一个无限制且高度可扩展的分散分布式DDS网络。

1.2 用法描述
DDS路由器是一个终端(非图形化)应用程序,只要DDS网桥正在运行,它就会创建DDS网桥。YAML格式的配置非常直观,易于阅读。整个应用程序被认为是用户友好的,遵循面向用户的设计。
- Run. 为了运行DDS路由器应用程序,只需要特定配置的YAML配置文件(请参阅一节以检查如何配置DDS路由器)(请参阅第节以检查应用程序支持的参数)。
- Interact. DDS Router应用程序运行后,只需更改YAML配置文件即可在运行时更改此通信中涉及的主题(有关重新配置正在运行的DDS Router的更多详细信息,请参阅“重新加载主题”一节)。
- Stop. 要停止DDS路由器,只需向进程发送^C信号,它就会优雅地关闭整个应用程序(有关如何关闭应用程序的详细信息,请参阅关闭应用程序一节)。
1.3 常用用例
DDS路由器可以应用的不同情况非常不同,并且随着未来版本中添加新的参与者类型,这种情况会增加。这些是迄今为止最常见的用例:

2. 用法示例
本示例将作为一个实践教程,旨在介绍eProsima DDS路由器提供的一些关键概念和功能。
两个不相交的DDS网络将通过一对路由器桥接,允许在每个网络上托管的端点之间进行连接。特别是,两个ShapesDemo实例将在正确配置和部署上述两个路由器后建立通信。

此示例适用于LAN和WAN场景。对于WAN情况,请确保使用公共IP地址而不是专用IP地址,并且通过在Internet路由器设备中正确配置端口转发,可以访问提供的端口。
2.1 启动ShapesDemo
ShapesDemo是一个发布和订阅在板上移动的不同颜色和大小的形状的应用程序。这不过是一个图形工具,用于测试特定DDS协议实现的正确性,以及证明与其他实现的互操作性。
让我们在一个DDS网络中启动ShapesDemo实例,并使用默认设置在主题“正方形”、“圆形”和“三角形”中发布。

现在,在其他网络中运行另一个实例,并订阅在发布者端选择的相同主题(使用默认设置)。

如果您在LAN场景中尝试此示例,请确保在其中一个ShapesDemo实例中使用了不同的DDS域id,以避免它们之间的直接通信。
2.2 Router配置
运行DDS路由器实例只需要配置文件。简而言之,如果每个路由器的相关主题与允许列表中包含的筛选器匹配,则每个路由器都会转发消息。也可以单独指定阻止列表,或者除了允许列表之外,还可以指定阻止列表。
让我们首先只添加一个Square Topic:
allowlist:- name: Square
除了选择我们希望发送/接收数据的主题之外,我们还必须配置最终执行通信的参与者。每个路由器实例将包含一个简单的和一个WAN参与者。简而言之,简单的参与者将负责与相应的ShapesDemo应用程序进行本地通信,而WAN参与者将负责桥接两个DDS网络之间的连接。

简单参与者所需的唯一配置是DDS域标识符。
- name: SimpleParticipantkind: localdomain: 0
如果在同一LAN中启动两个路由器,请在两个配置文件之一中设置不同的域id(与之前为ShapesDemo设置的相同)。
广域网参与者的配置更为复杂,我们在此不再详细介绍。简而言之,在本例中,两个WAN参与者都将通过UDP进行通信,其中一个是客户端,另一个是服务器角色。两个参与者都需要有一个侦听地址(对于UDP情况),在那里他们将期望接收流量,而对于客户端,则需要一个连接地址,该地址指向服务器的侦听地址。有关详细信息,请参阅WAN参与者和WAN配置。您还可以查看WAN示例,了解如何配置此类参与者的详细说明。
以下是客户端和服务器配置文件的示例:
# client-ddsrouter.yaml
version: v3.0allowlist:- name: Squareparticipants:- name: SimpleParticipantkind: localdomain: 0- name: ClientWANkind: wanconnection-addresses:- ip: 192.168.1.8port: 11800transport: udplistening-addresses:- ip: 192.168.1.4port: 11008transport: udp# server-ddsrouter.yaml
version: v3.0allowlist:- name: Squareparticipants:- name: SimpleParticipantkind: localdomain: 1- name: ServerWANkind: wanlistening-addresses:- ip: 192.168.1.8port: 11800transport: udp
2.3 Router执行
现在,配置文件就绪后,启动DDS路由器实例就像执行以下命令一样简单:
ddsrouter -c config-file.yaml
设置好两个路由器后,两个ShapesDemo实例之间的通信应该已经建立,因此方形现在在用户面板中可见。

DDS Router支持在运行时动态添加/删除主题(请参阅重新加载主题)。让我们通过将圆圈主题添加到两个路由器的允许列表来测试这个特性。此外,通过删除方形主题(从路由器的允许列表中删除此主题就足够了),方形数据应该停止到达订户。或者,可以将方形主题添加到阻止列表中,从而达到相同的效果。有关允许列表的详细信息,请参阅主题筛选。
allowlist:- name: Circle
应用这些更改后,用户侧的正方形不再更新(看起来可见但已冻结),而圆形应该更新。

有关如何配置和设置路由器的更多信息,以及如何发现DDS路由器可用作有用工具的多个场景,请随意浏览示例和用例部分。
相关文章:
fastdds router-3.开始
1. 项目概述 DDS路由器是由eProsima开发的跨平台非图形化应用程序,由Fast DDS提供支持,允许创建一个通信桥,连接两个DDS网络,否则将被隔离。DDS路由器的主要用途是通信两个物理或虚拟分离的DDS网络,这些网络属于不同的…...
云服务器ECS 什么是云服务器ECS?
云服务器ECS(Elastic Compute Service)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。 云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共…...
【socket网络编程】
socket网络编程主机字节序列和网络字节序列套接字地址结构通用socket地址结构专用的socket地址结构IP地址转换函数网络编程接口TCP编程流程代码举例服务器代码客户端服务器并发处理多个客户端多线程多进程主机字节序列和网络字节序列 主机字节序列分为大端模式和小端模式&…...
【验证码逆向专栏】某验三代、四代一键通过模式逆向分析
声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 本文章未经许可禁止转载…...
《MySql学习》 MySQL的 加锁规则
MySQL加锁原则 两个原则 原则 1:加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间(区间锁和行锁)。原则 2:查找过程中访问到的对象(索引)才会加锁。 两个优化 1.优化 1:索引上…...
软件测试(linux命令篇-01文件操作命令)
linux文件篇命令linux系统常用文件操作命令1、查看目录内容及常用参数:ls2、目录切换:cd 3、创建文件:touch 4、创建目录 :mkdir5、 删除文件或目录:rm6、文件或目录的复制:cp7、文件或目录的移动ÿ…...
Code Virtualizer 3.1.4 Crack
Code Virtualizer 是一个强大的 Windows 应用程序代码混淆系统,它可以帮助开发人员保护他们的敏感代码区域免受逆向工程的影响,基于代码虚拟化的非常强大的混淆代码。 Code Virtualizer 会将您的原始代码(Intel x86/x64 指令)转换…...
Torch同时训练多个模型
20230302 引言 在进行具体的研究时,利用Torch进行编程,考虑到是不是能够同时训练两个模型呢?!而且利用其中一个模型的输出来辅助另外一个模型进行学习。这一点,在我看来应该是很简单的,例如GAN网络同时训…...
LCR数字电桥软件下载安装教程
软件:LCR数字电桥软件NS-LCR 语言:简体中文 环境:NI-VISA 安装环境:Win10以上版本(特殊需求请后台私信联系客服) 硬件要求:CPU2GHz 内存4G(或更高)硬盘500G(或更高) …...
C++模板写法详解
模板 概念 模板就是建立通用的模具,大大提高复用性 模板主要体现了cpp编程的另外一种思想泛型编程cpp提供两种模板机制 函数模板类模板 函数模板 作用 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表 语…...
【备战面试】每日10道面试题打卡-Day2
本篇总结的是Java基础知识相关的面试题,后续也会更新其他相关内容 文章目录1、 和 equals 的区别是什么?2、你重写过 hashcode 和 equals 吗,为什么重写equals时必须重写hashCode方法?3、为什么Java中只有值传递?4、BI…...
“数字档案室测评”相关参考依据梳理
数字档案室建设无疑比数字档案馆建设应用范围更为广泛,涉及的单位类型和专业领域也更多。这一点从国家档案局的机构设置上也可以看出端倪: 国家档案局两个内设业务指导司中,档案馆(室)业务指导司主要针对档案馆和机关档案室,而经济…...
android 动态加载jar包
什么时候需要用到动态加载jar包呢? 减少apk本身大小,某些界面才需要用jar里的功能jar中的功能可以独立开发,不要依赖其它的东西,能适用各个项目和第三方公司合作,人家不提供项目源码给你,但又要开发他们使…...
JAVA版B2B2C商城源码多商户入驻商城
三勾商城多商户是开发友好的微信小程序商城,框架支持SAAS,支持发布 iOS Android 公众号 H5 各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)等多个平台,不可多得的二开神器, 为大中小企业提供极致的移…...
测试人员如何在测试环境数据库批量生成测试数据?方案分享
测试人员为了测试某个特定场景,往往需要在测试环境数据库中插入特定的测试数据来满足需求;性能测试时,常需要在测试环境生成大量可用测试数据来支持性能测试;建设持续集成持续交付体系时,我们往往也需要在测试环境生成…...
【el】表单
elementUI中的表单相关问题一、用法1、动态表单调用接口返回表单,后端的接口返回值如下:这些是渲染后的效果页面使用(父组件)<el-button size"small" class"Cancelbtn" click"sub(true)">发起…...
【Flutter入门到进阶】Flutter基础篇---布局
1 GridView网格布局组件 1.1 说明 1.1.1 图例 1.1.2 说明 GridView网格布局在实际项目中用的也是非常多的,当我们想让可以滚动的元素使用矩阵方式排列的时 候。此时我们可以用网格列表组件GridView实现布局 GridView创建网格列表主要有下面三种方式 1、可以通过Gr…...
python海龟绘图
一、基础 (一)介绍 海龟绘图(Turtle Graphics):“小海龟”turtle是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始…...
【计算机网络】数据链路层
概述 封装成帧 差错检验 可靠传输 实现机制 可靠传输的实现机制 停止等待协议 回退N帧协议 选择重传协议 【计算机网络】MAC帧和PPP帧(定义使用范围区别共同点)_GPNU_Log的博客-CSDN博客_ppp帧 PPP帧和以太网帧 | Mixoo 数据链路层的协议有PPP协…...
使用groovy代码方式解开gradle配置文件神秘面纱
来到这里的是不是都有以下疑问: 1.build.gradle配置文件结构好复杂啊,怎么记? 2.内部是怎么进行分析和执行的? 3.为什么可以在配置文件里面写groovy代码,怎么识别的? 4.怎么才能很方便的记住和快速上手…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
