Mosquitto-1.5.4源码分析,把握全局的数据结构

简介: Mosquitto-1.5.4源码分析,把握全局的数据结构

/lib/mosquitto_internal.h

struct mosquitto { //结构体struct mosquito主要用于保存一个客户端连接的所有信息,例如用户名、密码、用户ID、向该客户端发送的消息等
    mosq_sock_t sock; /*服务器程序与该客户端连接通信所用的socket描述符*/
#ifndef WITH_BROKER
  mosq_sock_t sockpairR, sockpairW;
#endif
#if defined(__GLIBC__) && defined(WITH_ADNS)
  struct gaicb *adns; /* For getaddrinfo_a */
#endif
  enum mosquitto__protocol protocol;
    char *address; /*该客户端的IP地址*/
    char *id; /*该客户端登陆mosquitto程序时所提供的ID值,该值与其他的客户端不能重复*/
  char *username;
  char *password;
    uint16_t keepalive; /*该客户端需在此时间内向mosquitto服务器程序发送一条ping/pong消息*/
  uint16_t last_mid;
  enum mosquitto_client_state state;
    time_t last_msg_in; /*last_msg_in和last_msg_out用于记录上次收发消息的时间*/
  time_t next_msg_out;
  time_t ping_t;
  struct mosquitto__packet in_packet;
  struct mosquitto__packet *current_out_packet;
  struct mosquitto__packet *out_packet;
  struct mosquitto_message *will;
    ......

/src/mosquitto_broker_internal.h


struct mosquitto__subleaf { //firecat,leaf叶子,对某一topic的所有订阅者被组织成一个订阅列表,该订阅列表是一个双向链表,链表的每个节点都保存有一个订阅者
    struct mosquitto__subleaf *prev; /*前指针*/
    struct mosquitto__subleaf *next; /*后指针*/
    struct mosquitto *context; /*表示一个订阅客户端*/
    int qos; /* Qos Level */
};
struct mosquitto__subhier { //用来保存订阅树的所有节点(包括叶子节点和中间节点),mosquitto中对订阅树采用孩子-兄弟链表法的方式进行存储
  UT_hash_handle hh;
  struct mosquitto__subhier *parent;
    struct mosquitto__subhier *children; /*第一个孩子节点*/
    struct mosquitto__subleaf *subs; /*指向订阅列表*/
  struct mosquitto_msg_store *retained;
    mosquitto__topic_element_uhpa topic; /*订阅主题*/
  uint16_t topic_len;
};
struct mosquitto_db{ //结构体struct mosquitto_db是mosquitto对所有内部数据的统一管理结构,可以认为是其内部的一个内存数据库。
                     //它保存了所有的客户端,所有客户端的订阅关系等等
  dbid_t last_db_id;
    struct mosquitto__subhier *subs; /*订阅树的总树根*/
  struct mosquitto__unpwd *unpwd;
  struct mosquitto__unpwd *psk_id;
    struct mosquitto *contexts_by_id; /*所有的客户端都在此数组中保存*/
  struct mosquitto *contexts_by_sock;
  struct mosquitto *contexts_for_free;
#ifdef WITH_BRIDGE
  struct mosquitto **bridges;
#endif
    struct clientid__index_hash *clientid_index_hash; /*用于保存一个hash表,该hash表可通过客户端的ID快速找到该客户端在数组contexts中的索引*/
  struct mosquitto_msg_store *msg_store;
  struct mosquitto_msg_store_load *msg_store_load;
#ifdef WITH_BRIDGE
  int bridge_count;
#endif
  int msg_store_count;
  unsigned long msg_store_bytes;
  char *config_file;
    struct mosquitto__config *config; /*保存所有配置信息*/
  int auth_plugin_count;
  bool verbose;
#ifdef WITH_SYS_TREE
  int subscription_count;
  int retained_count;
#endif
  int persistence_changes;
  struct mosquitto *ll_for_free;
#ifdef WITH_EPOLL
  int epollfd;
#endif
};
相关文章
|
4月前
|
消息中间件 存储 NoSQL
Redis数据结构—跳跃表 skiplist 实现源码分析
Redis 是一个内存中的数据结构服务器,使用跳跃表(skiplist)来实现有序集合。跳跃表是一种概率型数据结构,支持平均 O(logN) 查找复杂度,它通过多层链表加速查找,同时保持有序性。节点高度随机生成,最大为 32 层,以平衡查找速度和空间效率。跳跃表在 Redis 中用于插入、删除和按范围查询元素,其内部节点包含对象、分值、后退指针和多个前向指针。Redis 源码中的 `t_zset.c` 文件包含了跳跃表的具体实现细节。
|
6月前
|
存储 API
milvus insert api的数据结构源码分析
milvus insert api的数据结构源码分析
1051 6
milvus insert api的数据结构源码分析
|
监控 NoSQL Redis
Redis 源码分析客户端数据结构(client)(下)
Redis 源码分析客户端数据结构(client)
449 0
Redis 源码分析客户端数据结构(client)(下)
|
存储 算法 Java
《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
135 0
《恋上数据结构第1季》哈希表介绍以及从源码分析哈希值计算
|
存储 NoSQL Unix
Redis 源码分析客户端数据结构(serverDb)
数据库存储在 redisDb 结构中,而服务端 redisServer 结构中保存着 redisDb 对象和个数,个数可以在配置文件中进行更新。
280 0
Redis 源码分析客户端数据结构(serverDb)
|
存储 Java 索引
netty案例,netty4.1源码分析篇四《ByteBuf的数据结构在使用方式中的剖析》
在Netty中ByteBuf是一个非常重要的类,它可以以高效易用的数据结构方式来满足网络通信过程中处理数据包内字节码序列的移动。
206 0
netty案例,netty4.1源码分析篇四《ByteBuf的数据结构在使用方式中的剖析》
|
NoSQL 网络协议 Redis
Redis 源码分析客户端数据结构(client)(上)
Redis 源码分析客户端数据结构(client)
282 0
|
存储
Mosquitto-1.5.4源码分析,主题订阅的数据结构及SUBSCRIBE的函数跳转关系
Mosquitto-1.5.4源码分析,主题订阅的数据结构及SUBSCRIBE的函数跳转关系
361 0
Mosquitto-1.5.4源码分析,主题订阅的数据结构及SUBSCRIBE的函数跳转关系
|
C语言
Mosquitto-1.5.4源码分析,数据结构之哈希表uthash
Mosquitto-1.5.4源码分析,数据结构之哈希表uthash
247 0
|
12天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
86 9

热门文章

最新文章