mosquitto分析

本文深入解析Mosquitto MQTT Broker的核心数据结构,包括客户端连接信息、订阅关系管理、配置信息存储等关键组件。揭示了系统topic与业务topic的区别,探讨了订阅树的创建与维护机制。
  1. mosquitto分析
    核心数据结构
     struct mosquitto(mosquitto_internal.h) 保存客户端连接的所有信息
     struct mosquitto_db(mosquitto_broker.h) 对所有内部数据的统一管理,保存所有客户端,订阅关系,可是为数据仓库
     struct _mosquitto_subhier(mosquitto_broker.h) 保存订阅树的所有节点,mosquitto中对订阅树采用孩子-兄弟链表法的方式存储
     struct _mosquitto_config(mosquitto_broker.h) 保存mosquitto的所有配置信息,程序启动时候将初始化该结构体,并从配置文件读取配置信息保存在该结构体中
     
     
     核心功能分析:
       1.生存周期不同,系统topic无论是否有用户订阅都会存在于订阅树中,但业务topic必须有客户端订阅才能存在(除非其消息字段retain设置为1)
       2.创建方式不同,系统topic在消息发布时创建,业务topic可以在订阅时和发布时创建(需要设置retain设置为1);
       3.消息保存方式不同,凡发布到系统topic的消息都会保存,业务消息将直接挂到订阅列表的各context消息队列中,如无连接点阅或未设置retain字段,消息不会被保存
          mqtt3_handle_publish检查retain字段的值,该函数打印retain=(header & 0x01);
          获取消息头部第一个bit位,在mqtt3.1中,该位用于表示消息的类型是否为retain
          订阅树在程序中采用孩子--兄弟链表示 涉及数据结构如下
          struct _mosquitto_subhier
          struct _mosquitto_subleaf
          
    3.1.1 订阅树创建
            程序启动创建订阅树:订阅树总根节点,业务子树根节点&&系统子树根节点。这两个子树根节点作为订阅树总根
            节点的两个子节点。订阅总根节点和业务子树根节点中topic成员的值为空字符串,而系统子树根节点中保存的值为"$SYS"
        1.创建订阅树
        2.搭建订阅树
        3.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值