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助手提供,问题来源于学员提问