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: SimpleParticipant
kind: local
domain: 0
如果在同一LAN中启动两个路由器,请在两个配置文件之一中设置不同的域id(与之前为ShapesDemo设置的相同)。
广域网参与者的配置更为复杂,我们在此不再详细介绍。简而言之,在本例中,两个WAN参与者都将通过UDP进行通信,其中一个是客户端,另一个是服务器角色。两个参与者都需要有一个侦听地址(对于UDP情况),在那里他们将期望接收流量,而对于客户端,则需要一个连接地址,该地址指向服务器的侦听地址。有关详细信息,请参阅WAN参与者和WAN配置。您还可以查看WAN示例,了解如何配置此类参与者的详细说明。
以下是客户端和服务器配置文件的示例:
# client-ddsrouter.yaml
version: v3.0
allowlist:
- name: Square
participants:
- name: SimpleParticipant
kind: local
domain: 0
- name: ClientWAN
kind: wan
connection-addresses:
- ip: 192.168.1.8
port: 11800
transport: udp
listening-addresses:
- ip: 192.168.1.4
port: 11008
transport: udp
# server-ddsrouter.yaml
version: v3.0
allowlist:
- name: Square
participants:
- name: SimpleParticipant
kind: local
domain: 1
- name: ServerWAN
kind: wan
listening-addresses:
- ip: 192.168.1.8
port: 11800
transport: udp
2.3 Router执行
现在,配置文件就绪后,启动DDS路由器实例就像执行以下命令一样简单:
ddsrouter -c config-file.yaml
设置好两个路由器后,两个ShapesDemo实例之间的通信应该已经建立,因此方形现在在用户面板中可见。
DDS Router支持在运行时动态添加/删除主题(请参阅重新加载主题)。让我们通过将圆圈主题添加到两个路由器的允许列表来测试这个特性。此外,通过删除方形主题(从路由器的允许列表中删除此主题就足够了),方形数据应该停止到达订户。或者,可以将方形主题添加到阻止列表中,从而达到相同的效果。有关允许列表的详细信息,请参阅主题筛选。
allowlist:
- name: Circle
应用这些更改后,用户侧的正方形不再更新(看起来可见但已冻结),而圆形应该更新。
有关如何配置和设置路由器的更多信息,以及如何发现DDS路由器可用作有用工具的多个场景,请随意浏览示例和用例部分。
标签:WAN,DDS,开始,网络,应用程序,ddsrouter,参与者,路由器 From: https://www.cnblogs.com/zhangzl419/p/17167304.html