关于fastdds DataReader和DataWriter匹配速率,导致消息无法及时接收和发送

在工作中遇到了fastdds向服务器发送消息后却没有及时收到回执,后面经过测试发现原因出现在DataWriter和DataReader的匹配速度过慢。比如为什么有的需要睡几十毫秒后消息才可以正常的发送和接收到,问题就是出在了匹配速度上。

为解决匹配速度带来的问题,我们可以修改qos,增大初次广播次数,以此来提高匹配的效果。

如下:

        auto qos = DomainParticipantFactory::get_instance()->get_default_participant_qos();
        std::string name = participantName + std::to_string(Tools::getEpochMs());
        qos.name(name);
        qos.wire_protocol().builtin.discovery_config.discoveryProtocol = eprosima::fastrtps::rtps::DiscoveryProtocol::SIMPLE;
        qos.wire_protocol().builtin.avoid_builtin_multicast = true;
        // 初始公告·「初始阶段」
        qos.wire_protocol().builtin.discovery_config.initial_announcements.count = 50; // 初始公告次数
        qos.wire_protocol().builtin.discovery_config.initial_announcements.period = eprosima::fastrtps::Duration_t(0, 100*1000*1000); // 100 ms
        qos.wire_protocol().builtin.discovery_config.use_SIMPLE_EndpointDiscoveryProtocol = true; // 开启
        qos.wire_protocol().builtin.discovery_config.m_simpleEDP.use_PublicationWriterANDSubscriptionReader = true;
        qos.wire_protocol().builtin.discovery_config.m_simpleEDP.use_PublicationReaderANDSubscriptionWriter = true;
        //「初始阶段结束后依赖leaseDuration进行通报」
        qos.wire_protocol().builtin.discovery_config.leaseDuration = eprosima::fastrtps::c_TimeInfinite;
        qos.wire_protocol().builtin.discovery_config.leaseDuration_announcementperiod.seconds = 0; // 通报周期要小于 Lease Duration
        qos.wire_protocol().builtin.discovery_config.leaseDuration_announcementperiod.nanosec = 500 * 1000 * 1000;//500毫秒

 在创建participant时我们将初次公告次数增加到50,初次公告时间为100毫秒。这样就可以大大提高匹配的成功率。后续初次公告结束后就会依赖与leaseDuration进行通报。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值