连接到 DDS 中的主机:是不是有网络?
Posted
技术标签:
【中文标题】连接到 DDS 中的主机:是不是有网络?【英文标题】:Connect to host in DDS: Is there networking at all?连接到 DDS 中的主机:是否有网络? 【发布时间】:2017-01-31 14:31:42 【问题描述】:我正在尝试了解 DDS 并学习它。我一直在这里和那里阅读有关 OpenSplice DDS 的教程,那里有些东西让我感到困惑。
在本教程中,导师在第 8 页提到了某种“魔法”,即发布者和订阅者在自动检测参与者的情况下解耦。
但是如果我在另一台计算机上有一个参与者怎么办?或者也许在另一个国家?
看看这个发布者的例子:
dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
dds::DataWriter<TempSensorType> dw(tsTopic);
TempSensorTypets = 1, 26.0F, 70.0F, CELSIUS;
dw.write(ts);
还有这个订阅者的例子:
dds::Topic<TempSensorType> tsTopic("TempSensorTopic");
dds::DataReader<TempSensorType> dr(tsTopic);
dds::SampleInfoSeq info;TempSensorSeq data;
while (true)
dr.read(data, info);
for (inti =0; i < data.length(); ++i)
std::cout << data[i] << std::endl;sleep(1);
和this full working example of both(tspub.cpp
是发布者,tssub.cpp
是订阅者),我不明白人们如何远程连接。如何订阅另一台机器?我怎样才能让这个漂亮而简单的示例远程工作?
如果您需要更多信息或详细信息,请询问。
【问题讨论】:
【参考方案1】:参与者通过 UDP 多播相互连接 - 请记住,标准中对此进行了描述,因此要全面了解,请阅读该内容。它是免费提供的。
规范中只定义了 UDP,所以如果他们使用替代的连接策略(shmem、TCP、其他),那么它将取决于供应商。 RTI 实现不会通过 shmem 与 OpenSplice 实现通信(但它们可以通过 UDP 环回)。
有一个从已知 UDP 端口开始的协商。
如果两个系统在同一个子网上,并且启用了多播,它们将通过标准中描述的魔法进行连接。这假设它们具有兼容的域 ID、主题、类型和 QoS。
真的:阅读标准。
【讨论】:
以上是关于连接到 DDS 中的主机:是不是有网络?的主要内容,如果未能解决你的问题,请参考以下文章
ssh:连接到主机 gitlab.com 端口 22:网络不可达