DDS自动应用发现

RTI Connext DDS内置的自动发现功能是其与其他网络中间件实现不同的一种重要方式。
默认情况下,Connext DDS应用程序使用共享内存或UDP环回相互发现(如果它们位于同一主机上)或使用多播(如果它们位于不同主机上)。因此,要使用多播在两台或多台计算机上运行应用程序,或在具有网络连接的单台计算机上运行应用程序,则不需要进行任何更改。他们会自动发现对方。
如果要使用不支持多播的计算机(或者由于某些其他原因需要使用单播),或者如果要在没有网络连接的单台计算机上运行(在这种情况下,您的操作系统可能具有禁用您的网络堆栈),有一种简单的方法来控制发现过程 - 您甚至不必重新编译。可以通过NDDS_DISCOVERY_PEERS环境变量或QoS配置文件配置应用程序发现。

何时设置发现对等方

你必须在几种情况下设置发现对等体:
(下文中,N代表要运行的Connext DDS应用程序的数量。)
1.如果你不能使用组播:
将发现对等方设置为需要相互发现的所有主机的列表。该列表可以包含主机名和/或IP地址;每个条目的格式应为N@bulitin.udpv4://<hostname|IP>
2.如果您没有网络连接:
某些操作系统(例如,Microsoft Windows)在检测到没有可用的网络接口时禁用其网络堆栈的某些功能。当应用程序尝试打开网络连接时,这可能会导致问题。
如果您的系统支持共享内存,请将发现对等项设置为N@builtin.shmem://。这将仅启用共享内存传输。
如果你的系统不支持共享内存(或已被禁用),设置你的发现同行的环回地址,N@builtin.udpv4://127.0.0.1

如何设置发现对等方

如上所述,在大多数情况下,您无需显式设置发现对等体。
如果将它们设置时必需的,有两种简单的方法可以这样做:
将NDDS_DISCOVERY_PEERS环境变量设置为以逗号分隔的列表,列出需要相互发现的所有主机的名称或地址。
Windows系统上的示例:

		设置NDDS_DISCOVERY_PEERS=3@builtin.udpv4://mypeerhost1,4@builtin.udpv4://mypeerhost2

使用csh或tcsh时基于UNIX的系统上的示例:

		setenv NDDS_DISCOVERY_PEERS 3@builtin.udpv4://mypeerhost1,4@builtin.udpv4://mypeerhost2

在XML QoS配置文件中设置发现对等项列表。
例如,要仅打开共享内存:

	<participant_qos>
	   <discovery>
	      <!--
	      The initial_peers list are those "addresses" to which the
	      middleware will send discovery announcements.
	      -->
	      <initial_peers>
	         <element>4@builtin.shmem://</element>
	      </initial_peers>
	      <!--
	      The multicast_receive_addresses list identifies where the
	      DomainParticipant listens for multicast announcements
	      from others. S				et this list to an empty value to disable
	      listening over multicast.
	      -->
	      <multicast_receive_addresses>
	         <!-- empty -->
	      </multicast_receive_addresses>
	   </discovery>   
	   <transport_builtin>
	      <!--
	      The transport_builtin mask identifies which builtin
	      transports the DomainParticipant uses. The default value
	      is UDPv4 | SHMEM, so set this mask to SHMEM to prevent
	      other nodes from initiating communication with this node
	      via UDPv4.
	      -->
	      <mask>SHMEM</mask>
	   </transport_builtin>
	   ...
	</participant_qos>

补充:
linux下设置环境变量:

export NDDS_DISCOVERY_PEERS=2@builtin.udpv4://192.168.1.103
echo $NDDS_DISCOVERY_PEERS

C++中设置环境变量:

#include <stdlib.h>
#include <stdio.h>

int iRet = putenv("testName=beauty");//设置环境变量
if (iRet < 0)
{
	printf("error\n");
}
else
{
	printf("set successfully\n");
}
const char *pEn = getenv("testName");//获取环境变量

该方法设置环境变量仅在当前进程有用

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值