当前位置: 首页 > wzjs >正文

邢台做wap网站的公司网站icp备案费用

邢台做wap网站的公司,网站icp备案费用,开发公司合作协议,wordpress安装路径准备开一个FAST-DDS源码分析系列,源码版本FAST-DDS 1.1.0版本。 FAST-DDS这种网络中间件是非常复杂的,所以前期先去分析每个类的作用是什么,然后在结合RTPS DOC,FAST-DDS DEMO,以及FAST-DDS的doc去串起来逻辑。 Builtin Discovery…

准备开一个FAST-DDS源码分析系列,源码版本FAST-DDS 1.1.0版本。

FAST-DDS这种网络中间件是非常复杂的,所以前期先去分析每个类的作用是什么,然后在结合RTPS DOC,FAST-DDS DEMO,以及FAST-DDS的doc去串起来逻辑。

Builtin Discovery 模块

xxxProxyData 类负责在 RTPS 网络中「宣布(Announce)」与「发现(Discover)」参与者及其读写端点(DataReader/DataWriter)。它们在本地对象状态与网络 CDR 消息之间建立了双向映射,确保 QoS、Locator、GUID 等关键信息能被高效、可靠地交换。

类:
在这里插入图片描述

WriterProxyData

关键成员变量:

class WriterProxyData
GUID_t              m_guid;               // 发布者全局唯一 ID
LocatorList_t       m_unicastLocatorList; // 单播地址列表
LocatorList_t       m_multicastLocatorList;// 组播地址列表
InstanceHandle_t    m_key;                // Writer 实例句柄
WriterQos           m_qos;                // 完整 QoS 配置
ParameterList_t     m_parameterList;      // 临时参数列表
RemoteWriterAttributes m_remoteAtt;       // 转换后的远端属性

关键函数:
在这里插入图片描述

  • toParameterList()
    清空 m_parameterList,并依次创建 ParameterLocator_t、ParameterGuid_t、ParameterString_t、各类 QoS Policy(只包含 sendAlways 或 hasChanged)等,将它们推入 m_parameterList.m_parameters。
  • readFromCDRMessage(CDRMessage_t* msg)
    调用 ParameterList::readParameterListfromCDRMsg 填充 m_parameterList,再根据 Pid 将各参数拆回到本地成员(如从 PID_TOPIC_NAME 恢复 m_topicName、从 PID_LIVELINESS 恢复 m_qos.m_liveliness)。
  • toRemoteWriterAttributes()
    将本地数据(GUID、Locator、QoS)映射到 RemoteWriterAttributes,供 RTPSWriter 在发送数据时参考。

ReaderProxyData

与 WriterProxyData 对称,表示一个远端或本地的 DataReader(订阅者)。在初始化发现、数据交互阶段,要互报 Locator、期望的 Inline QoS、各类订阅策略等。

GUID_t              m_guid;
bool                m_expectsInlineQos;    // 是否在 DATA 消息中期待附带 QoS
LocatorList_t       m_unicastLocatorList;
LocatorList_t       m_multicastLocatorList;
InstanceHandle_t    m_key;
ReaderQos           m_qos;
ParameterList_t     m_parameterList;
RemoteReaderAttributes m_remoteAtt;

在这里插入图片描述

ParticipantProxyData

负责对等 Participant(节点)级别的宣布与发现,包括:

  1. SPDP(Simple Participant Discovery Protocol)消息的构建与解析。
  2. 管理 Builtin Endpoint 集(哪些内置读写端点应被广播/监听)。
  3. 维护租约计时器,监测远端 Participant 存活性。
  4. 汇总下属所有 ReaderProxyData 与 WriterProxyData 对象。
class ParticipantProxyData {
public:ParticipantProxyData();virtual ~ParticipantProxyData();// —— 协议与标识 —— ProtocolVersion_t            m_protocolVersion;          // RTPS 协议版本VendorId_t                   m_VendorId;                 // 厂商 IDGUID_t                       m_guid;                     // 本地/远端 Participant GUID// —— QoS 与流量控制 —— bool                         m_expectsInlineQos;         // 是否期望 inline QoSBuiltinEndpointSet_t         m_availableBuiltinEndpoints;// 本节点宣布的内置端点集合Duration_t                   m_leaseDuration;            // Participant 租约周期Count_t                      m_manualLivelinessCount;    // 手动存活声明计数// —— 网络定位 —— LocatorList_t                m_metatrafficUnicastLocatorList;   // SPDP 单播列表LocatorList_t                m_metatrafficMulticastLocatorList; // SPDP 组播列表LocatorList_t                m_defaultUnicastLocatorList;       // 默认数据单播列表LocatorList_t                m_defaultMulticastLocatorList;     // 默认数据组播列表// —— 标识与属性 —— InstanceHandle_t             m_key;                      // Participant 实例句柄std::string                  m_participantName;          // Participant 名称std::vector<octet>           m_userData;                 // userData QoSParameterPropertyList_t      m_properties;               // 属性列表// —— 状态与并发 —— bool                         isAlive;                    // 存活标志bool                         m_hasChanged;               // 数据是否变更(影响 toParameterList)boost::recursive_mutex*      mp_mutex;                   // 保护 readers/writers 容器
bool ParticipantProxyData::initializeData(RTPSParticipantImpl* part, PDPSimple* pdp)
{// 1) 从本地 ParticipantImpl 获取租约时长、VendorId、默认 Locatorthis->m_leaseDuration = part->getAttributes().builtin.leaseDuration;set_VendorId_eProsima(this->m_VendorId);// 2) 根据配置,设置 availableBuiltinEndpoints 掩码this->m_availableBuiltinEndpoints |= DISC_BUILTIN_ENDPOINT_PARTICIPANT_ANNOUNCER;...// 3) 复制 Locator 列表this->m_defaultUnicastLocatorList = part->getAttributes().defaultUnicastLocatorList;...// 4) 保存 Participant 名称与 GUID、InstanceHandlethis->m_participantName = part->getAttributes().getName();this->m_guid = part->getGuid();for (i < 16) { copy into m_key }// 5) 从 PDPSimple(SPDP 组件)拷贝 metatraffic Locatorthis->m_metatrafficMulticastLocatorList = pdp->mp_builtin->m_metatrafficMulticastLocatorList;...return true;
}

将本地 RTPSParticipantImpl 上的租约时长、GUID、Locator、ParticipantName、UserData 等信息拷贝进来,同时根据配置设置需要 Announce/Detect 的内置端点位掩码,并复制 SPDP 使用的 metatraffic Locator。

bool ParticipantProxyData::toParameterList()
{if (m_hasChanged){// 清理并重置 QoSListm_QosList.allQos.resetList();m_QosList.inlineQos.resetList();// 依次 addQos:协议版本、VendorID、EXPECTS_INLINE_QOS、GUIDvalid &= QosList::addQos(&m_QosList, PID_PROTOCOL_VERSION, this->m_protocolVersion);valid &= QosList::addQos(&m_QosList, PID_VENDORID, this->m_VendorId);if (m_expectsInlineQos)valid &= QosList::addQos(&m_QosList, PID_EXPECTS_INLINE_QOS, m_expectsInlineQos);valid &= QosList::addQos(&m_QosList, PID_PARTICIPANT_GUID, this->m_guid);// 添加所有 Locator 列表、租约时长、BuiltinEndpointSet、ParticipantName、UserData、Propertiesfor each Locator in m_metatrafficMulticastLocatorList:valid &= QosList::addQos(&m_QosList, PID_METATRAFFIC_MULTICAST_LOCATOR, locator);...valid &= QosList::addQos(&m_QosList, PID_PARTICIPANT_LEASE_DURATION, this->m_leaseDuration);valid &= QosList::addQos(&m_QosList, PID_BUILTIN_ENDPOINT_SET, this->m_availableBuiltinEndpoints);valid &= QosList::addQos(&m_QosList, PID_ENTITY_NAME, this->m_participantName);if (!m_userData.empty())valid &= QosList::addQos(&m_QosList, PID_USER_DATA, this->m_userData);if (!m_properties.empty())valid &= QosList::addQos(&m_QosList, PID_PROPERTY_LIST, this->m_properties);// 最后根据 endianess 调用 CDR 序列化valid &= ParameterList::updateCDRMsg(&m_QosList.allQos, LITTLEEND);if (valid) m_hasChanged = false;return valid;}return true;
}

当 m_hasChanged == true 时,将协议版本、VendorID、GUID、Locator 列表、租约时长、BuiltinEndpointSet、ParticipantName、UserData、Properties 等,按照 RTPS ParameterList 规范打包到 m_QosList.allQos 中,并调用 CDR 序列化。打包成功后将 m_hasChanged 清零。

bool ParticipantProxyData::readFromCDRMessage(CDRMessage_t* msg)
{if (ParameterList::readParameterListfromCDRMsg(msg, &m_QosList.allQos, NULL) > 0){for (auto* p : m_QosList.allQos.m_parameters){switch (p->Pid){case PID_KEY_HASH:// 从 key 恢复 GUIDcase PID_PROTOCOL_VERSION:// 兼容性校验case PID_VENDORID:// VendorId 拷贝case PID_EXPECTS_INLINE_QOS:m_expectsInlineQos = ((ParameterBool_t*)p)->value;break;case PID_METATRAFFIC_MULTICAST_LOCATOR:m_metatrafficMulticastLocatorList.push_back(((ParameterLocator_t*)p)->locator);break;...case PID_ENTITY_NAME:m_participantName = std::string(((ParameterString_t*)p)->getName());break;case PID_PROPERTY_LIST:m_properties = *((ParameterPropertyList_t*)p);break;case PID_USER_DATA:m_userData = ((UserDataQosPolicy*)p)->getDataVec();break;default: break;}}return true;}return false;
}
  1. 使用 ParameterList::readParameterListfromCDRMsg 解析 SPDP 收到的 CDR,填充 m_QosList.allQos.m_parameters。
  2. 按 Pid 分支,将参数恢复到相应字段。
  3. 对 PID_PROTOCOL_VERSION 进行向前兼容性校验:若远端版本过低则直接返回 false,弃用该 Participant。

本地信息采集 → initializeData
打包广播 → toParameterList
接收解析 → readFromCDRMessage
动态刷新 → updateData
生命周期管理 → 构造/析构、clear/copy


在 SPDP(Participant 简单发现协议)公告中,最关键的参数标识(ParameterId,PID)及其作用包括:

  • PID_PROTOCOL_VERSION
    表示 RTPS 协议版本,用于不同实现间的向前兼容性检测。
  • PID_VENDORID
    标识产品/厂商(如 eProsima),在多厂商环境中可用于隔离或兼容性判断。
  • PID_PARTICIPANT_GUID
    发布者自身的全局唯一标识(GUID),远端节点通过它区分不同 Participant。
  • PID_EXPECTS_INLINE_QOS
    指示该 Participant 是否在后续 DATA 消息中期望附带 QoS 信息(Inline QoS),影响后续的样本发送方式。
  • PID_METATRAFFIC_UNICAST_LOCATOR / PID_METATRAFFIC_MULTICAST_LOCATOR
    SPDP 协议使用的“元流量”单播/组播地址列表,告知远端如何向本地 Participant 发送发现消息。
  • PID_DEFAULT_UNICAST_LOCATOR / PID_DEFAULT_MULTICAST_LOCATOR
    普通数据流量(非发现)的默认单播/组播地址,后续 SEDP 或数据传输会用到。
  • PID_PARTICIPANT_LEASE_DURATION
    租约时长(Liveliness Lease Duration),指明多长时间没收到续约就认为该 Participant 已失效。
  • PID_BUILTIN_ENDPOINT_SET
    位掩码,说明本地 Participant 要 Announce/Detect 哪些内置端点(如 PublicationAnnouncer、SubscriptionDetector 等)。
  • PID_ENTITY_NAME
    Participant 的可读名称(EntityName),便于日志、调试和监控时识别节点。
  • PID_USER_DATA
    用户自定义二进制数据,可用于传递应用层特定的元信息或身份验证令牌。
  • PID_PROPERTY_LIST
    键-值属性列表(Property List),支持扩展静态 EDP、配置注入或其他高级用例。

这些 PID 在 ParticipantProxyData::toParameterList() 中依次被打包进 SPDP 消息,在 readFromCDRMessage() 中被解析恢复,构成了 Participant 级别发现协议的核心。它们保证了节点身份、版本兼容、地址可达性、存活检测和可扩展性的完整传递。


文章转载自:

http://UeR2TtA7.nsLwj.cn
http://a283tTeF.nsLwj.cn
http://5uZTgct9.nsLwj.cn
http://MGrJ0x3m.nsLwj.cn
http://6cf9DMTN.nsLwj.cn
http://sU8WgDSW.nsLwj.cn
http://Q1Ionk3X.nsLwj.cn
http://Czp0xUSp.nsLwj.cn
http://dvmkp1xC.nsLwj.cn
http://3hzeMLyX.nsLwj.cn
http://Tf5OaPyK.nsLwj.cn
http://WGkhqVp5.nsLwj.cn
http://QySwkb8C.nsLwj.cn
http://gRaMlUgX.nsLwj.cn
http://SwLiGVL5.nsLwj.cn
http://7JQ6jnq6.nsLwj.cn
http://RGzhJuPL.nsLwj.cn
http://4kGl0l5p.nsLwj.cn
http://Q4jorFPM.nsLwj.cn
http://RKI1xqaq.nsLwj.cn
http://C0wOF70z.nsLwj.cn
http://cn3c8lak.nsLwj.cn
http://f2Bs0ihT.nsLwj.cn
http://D9c0JG8a.nsLwj.cn
http://LzQ1zYl3.nsLwj.cn
http://7Jdo32rY.nsLwj.cn
http://HgsJYDep.nsLwj.cn
http://m3NUzhGS.nsLwj.cn
http://uGiixbc3.nsLwj.cn
http://OZB5IeMj.nsLwj.cn
http://www.dtcms.com/wzjs/661535.html

相关文章:

  • 招商加盟网站大全汇总南充做网站电话
  • 有彩虹代刷源码怎么做网站邢台做网站地方
  • 自学做网站要学什么西安网站seo哪家公司好
  • 医疗整形网站怎么做网站建设文化策划方案
  • 聚企360做的网站精品源码分享免费下载
  • .net网站开发中注册页面wordpress两边有空白
  • 宁波做网站有哪些公司公司自动生成网址的软件
  • 自己电脑做网站 外网无法访问做华为网站的还有哪些
  • 怎么进入公司网站做网站需要什么工具
  • WordPress 付费文章插件网站优化排名
  • 个人网站毕业设计论文什邡门户网站
  • 佛山网站开发招聘深圳市建设网络有限公司网站
  • 哪家企业做网站企业网站发展趋势
  • 福州网站建设兼职wordpress可以用的邮箱
  • 广东网站开发公司池州网站建设有哪些公司
  • 百度新闻搜索seo超级外链工具免费
  • 自己注册了个域名想做一个网站吗室内设计培训班哪家好
  • 网站建设图片教程视频教程国家住房和城乡建设网站
  • 360网站外链建设杭州房产网二手房
  • 怎么快速建立一个网站企业网站的作用
  • seo和网站建设那个先学wordpress发广告
  • 做高端网站的网络公司中国移动idc建设网站
  • 广州企业网站找哪里网站的内链优化怎样做
  • wordpress 标签井号取消连云港seo
  • 常州建行网站二手房交易注意事项
  • 网站改版 报价网站建设陆金手指科捷14
  • 做外贸首先要做网站wordpress减少数据库连接
  • wordpress主题无法安装这个包网站建设内部优化
  • html做的好看的网站深圳口碑好的vi设计公司
  • 顺德网站开发潍坊专业网站建设