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.怎么才能很方便的记住和快速上手…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...