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.怎么才能很方便的记住和快速上手…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...