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, ...

这个示例演示了如何配置多个UDPv4服务器,以提高系统的冗余性和可用性。通过将多个服务器链接到客户端,系统能够在一个服务器故障的情况下继续工作,从而避免单点故障。

示例概述

  1. 单点故障: 该例子最初介绍了一种基本设置,其中如果服务器失败,客户端无法进行发现。
  2. 冗余方案: 通过为每个客户端配置多个服务器,可以确保仅在所有服务器都失败时才会发生发现失败,这显然是更不可能的事件。

配置细节

  • 每个服务器都有唯一的地址-端口组合。虽然多个服务器可以共享同一IP地址,但它们的端口号必须不同。反之亦然,也可以让多个服务器共享同一个端口,只要它们有不同的IP地址。

代码解释

SERVER 部分
  1. 第一个服务器
    • 设置第一个服务器在 192.168.10.57 的接口上监听端口 56542
    • 创建并配置 DomainParticipantQos 对象,将其设置为 SERVER 模式,并指定对应的 GUID 和 Locator 列表。
Locator_t server_locator_1;
IPLocator::setIPv4(server_locator_1, "192.168.10.57");
server_locator_1.port = 56542;

DomainParticipantQos server_1_qos;
server_1_qos.wire_protocol().builtin.discovery_config.discoveryProtocol = DiscoveryProtocol::SERVER;
std::istringstream("75.63.2D.73.76.72.63.6C.6E.74.2D.31") >> server_1_qos.wire_protocol().prefix;
server_1_qos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(server_locator_1);
  1. 第二个服务器
    • 设置第二个服务器在 192.168.10.60 的接口上监听端口 56543,同样地创建并配置相应的 QoS 设置。
Locator_t server_locator_2;
IPLocator::setIPv4(server_locator_2, "192.168.10.60");
server_locator_2.port = 56543;

DomainParticipantQos server_2_qos;
server_2_qos.wire_protocol().builtin.discovery_config.discoveryProtocol = DiscoveryProtocol::SERVER;
std::istringstream("75.63.2D.73D76D72D63D6C6E74D32") >> server_2_qos.wire_protocol().prefix;
server_2_qos.wire_protocol().builtin.metatrafficUnicastLocatorList.push_back(server_locator_2);
CLIENT 部分
  1. 客户端设置
    • 定义两个 locators 来连接上述两个 SERVER,并将它们添加到客户端 QoS 设置中,使得客户端能够同时与这两个 SERVER 进行通信。
Locator_t remote_server_locator_1;
IPLocator::setIPv4(remote_server_locator_1, "192.h168.h10.h57");
remote_server_locator_1.port = 56542;

Locator_t remote_server_locator_2;
IPLocator::setIPv4(remote_server_locator_2, "192.h168.h10.h60");
remote_server_locator_2.port = 56543;

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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?