mosquitto分析

  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.

你可能感兴趣的:(#mosquitto)