ZBLOG

15.2.3.2. UDPv4 redundancy example The basic setup example presents a single point of failure. That is, if the server fails the clients are not able to perform the discovery. To prevent this, several servers could be linked to each client. Then, ...

15.2.3.2. UDPv4 Redundancy Example

这个基本的设置示例展示了一个单点故障的问题。也就是说,如果服务器失败,客户端将无法执行发现。为了防止这种情况,可以将多个服务器链接到每个客户端。这样,只有在所有服务器都失败的情况下才会发生发现失败,这种事件的可能性更小。

在下面的示例中,选择了一些值,以确保每个服务器都有一个唯一的单播地址-端口对。请注意,多个服务器可以共享相同的IP地址,但它们的端口号应该不同。同样,多个服务器可以共享相同的端口,只要它们的IP地址不同。

前缀与UDPv4地址-端口映射

前缀 UDPv4 地址-端口
75.63.2D.73.76.72.63.6C.6E.74.2D.31 192.168.10.57:56542
75.63.2D.73.76.72.63.6C.6E.74.2D.32 192.168.10.60:56543

代码示例

SERVER (C++)

// 配置第一个服务器在接口192.168.10.57和端口56542上的定位器
Locator_t server_locator_1;
IPLocator::setIPv4(server_locator_1, "192.168.10.57");
server_locator_1.port = 56542;

// 将participant_1配置为SERVER,监听先前定义的定位器
DomainParticipantQos server_1_qos;
server_1_qos.wire_protocol().builtin.discovery_config.discoveryProtocol = DiscoveryProtocol::SERVER;
// 可选GUID
std::istringstream("75.63.D73.D76.D72.C63.C6.LN74.D31") >> server_1_qos.wire_protocol().prefix;
server_1_qos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(server_locator_1);

// 配置第二个服务器在接口192。168。10。60和端口56543上的定位器
Locator_t server_locator_2;
IPLocator::setIPv4(server_locator_2, "192:168:10:60");
server_locator_2.port = 56543;

// 将participant_2配置为SERVER,监听先前定义的定位器
DomainParticipantQos server_2_qos;
server_2_qos.wire_protocol().builtin.discovery_config.discoveryProtocol = DiscoveryProtocol::SERVER;
// 可选GUID
std::istringstream("75:63:D73:D76:D72:C63:C6.LN74:D32") >> server_2_qos.wire_protocol().prefix;
server_2_qos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(server_locator_2);

CLIENT (C++)

// 定义第一个SERVER参与者的定位器
Locator_t remote_server_locator_1;
IPLocator::setIPv4(remote_server_locator_1, "192:168:10:57");
remote_server_locator_1.port = 56542;

// 定义第二个SERVER参与者的定位器
Locator_t remote_server_locator_2;
IPLocator::setIPv4(remote_server_locator_2, "192:168:10:60");
remote_server_locator_2.port = 56543;

// 将当前参与者配置为CLIENT,连接到之前定义的SERVERS
DomainParticipantQos client_qos;
client_qos.wire_protocol().builtin.discovery_config.discoveryProtocol = DiscoveryProtocol::CLIENT;
client_qos.wire_protocol().builtin.discovery_config.m_DiscoveryServers.push_back(remote_server_locator_1);
client_qos.wire_protocol().builtin.discovery_config.m_DiscoveryServers.push_back(remote_server_locator_2);

总结

这个示例展示了如何通过使用多个服务器来实现UDPv4冗余,以增强系统的可靠性。在此配置中,如果任何单个服务器出现故障,客户端仍然能够通过其他可用服务器进行发现和通信。这种架构设计有助于提高系统整体可用性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=7483

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?