MQTT Client源码分析
目录
之前基于杰杰的mqttclient代码和韦东山老师的教程,把MQTTClient程序移植到STM32F103开发板,F103的开发板串口连接ESP8266模组实现终端连接到MQTT服务器的功能,仅仅是对着韦老师的教程移植和使用杰杰的mqttclient代码,简单的将mqttclient\platform\FreeRTOS\platform_net_socket.c文件中的接口绑定到ESP8266的TCP AT命令,使用ESP8266的Socket,对于杰杰的mqttclient代码并没有深入分析和理解。
1. mqttclient架构
如下图:

1.1 API
mqttclient的API接口:
int mqtt_init(mqtt_client_t* c, client_init_params_t* init);
int mqtt_release(mqtt_client_t* c);
int mqtt_connect(mqtt_client_t* c);
int mqtt_disconnect(mqtt_client_t* c);
int mqtt_subscribe(mqtt_client_t* c, const char* topic_filter, mqtt_qos_t qos, message_handler_t msg_handler);
int mqtt_unsubscribe(mqtt_client_t* c, const char* topic_filter);
int mqtt_publish(mqtt_client_t* c, const char* topic_filter, mqtt_message_t* msg);
int mqtt_keep_alive(mqtt_client_t* c);
int mqtt_yield(mqtt_client_t* c, int timeout_ms);
1.2 mqtt_client_t结构体
typedef struct mqtt_client {
char *mqtt_client_id; //由用户传入,在连接MQTT时(mqtt_connect_with_results)序列化连接报文
char *mqtt_user_name; //由用户传入,在连接MQTT时(mqtt_connect_with_results)序列化连接报文
char *mqtt_password; //由用户传入,在连接MQTT时(mqtt_connect_with_results)序列化连接报文
char *mqtt_host; //由用户传入,在连接MQTT时(mqtt_connect_with_results)序列化连接报文
char *mqtt_port; //由用户传入,在连接MQTT时(mqtt_connect_with_results)序列化连接报文
char *mqtt_ca; //TLS才会用到,暂时不分析
void *mqtt_reconnect_data; //MQTT需要重连服务器时用到
uint8_t *mqtt_read_buf; //读数据缓冲区
uint8_t *mqtt_write_buf; //写数据缓冲区
uint16_t mqtt_keep_alive_interval; //MQTT保活超时时间
uint16_t mqtt_packet_id; //报文标识符
uint32_t mqtt_will_flag : 1; //遗嘱标志
uint32_t mqtt_clean_session : 1; //清理会话标志
uint32_t mqtt_ping_outstanding : 2; //PINGREQ后是否正在等待PINGRESP标志
uint32_t mqtt_version : 4; //MQTT协议版本
uint32_t mqtt_ack_handler_number : 24; //用于QOS1和QOS2中ACK记录
uint32_t mqtt_cmd_timeout; //命令超时时间(主要是读写阻塞时间、等待响

最低0.47元/天 解锁文章
645

被折叠的 条评论
为什么被折叠?



