Linux MQTT智能家居(源码使用分析)

简介: Linux MQTT智能家居(源码使用分析)

前言

本篇文章开始我们来分析一下大佬写的MQTT源码,并且来看看怎么样使用MQTT连接到服务器。

MQTT源码地址:源码地址

这里找到源码中的test.c进行分析:

一、连接服务器

1.初始化客户端

首先使用mqtt_lease函数初始化客户端:

里面主要使用platform_memory_alloc函数进行客户端的内存分配初始化。

platform_memory_alloc函数可以支持不同的操作系统,比如Linux,FreeRTOS,在不同的操作系统下有不同的实现。

2.设置端口号设置IP地址

使用mqtt_set_port设置端口号,使用mqtt_set_host函数设置要连接的IP地址。

3.连接服务器

使用mqtt_connect函数进行服务器的连接:

使用mqtt_connect函数进行服务器的连接时会发生下面一系列的调用关系:

platform_net_socket_connect函数是各个平台不同的连接方法,在单片机中可以使用esp8266进行网络的连接,在Linux中使用socket套接字进行网络的连接。

在mqtt_connect_with_results中会使用platform_thread_init函数来创建一个订阅线程这个订阅线程我们后面再进行分析:

二、发布消息

首先先创建一个发布消息的线程:

使用mqtt_message_t创建一个消息结构体,根据需求填充这个结构体中的内容。

mqtt_message_t结构体:

使用mqtt_publish函数发布消息。

这个函数内部会根据不同的平台来实现消息发布的函数:

三、订阅消息

订阅消息也是里面最复杂的一个了,因为我们不知道消息什么时候到达,所以必须创建一个线程一直等待消息,当消息到达后对消息进行处理。

使用mqtt_subscribe函数将对应的主题和handler处理函数放入链表,以后就可以根据主题找到对应的处理函数:

前面我们也看到了在使用mqtt_connect函数进行服务器的连接时就会帮我们创建出一个线程:mqtt_yield_thread。

在这个线程中又会调用到mqtt_yield函数进行相关的处理。

使用mqtt_packet_handle这个函数对订阅到的消息进行处理。

使用mqtt_publish_packet_handle对订阅消息进一步处理:

在mqtt_deliver_message函数中通过使用mqtt_get_msg_handler根据订阅的主题获取到对应的处理函数:

总结

在最后我再总结一下具体的流程:

1.使用mqtt_lease函数创建客户端。

2.使用mqtt_set_port和mqtt_set_host函数设置端口和IP地址。

3.使用mqtt_connect进行连接,在连接函数内部会创建出一个订阅线程。

4.使用pthread_create函数创建发布线程在线程中构造mqtt_message_t结构体,使用mqtt_publish函数将构造好的数据发布出去。

5.使用mqtt_subscribe函数将主题和处理函数放入结构体中,当接收到对应的主题后根据链表中的对应关系找到处理函数进行订阅消息的处理。


相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
Linux Android开发
嵌入式linux中Framebuffer 驱动程序框架分析
嵌入式linux中Framebuffer 驱动程序框架分析
31 0
|
2月前
|
Linux C语言 SoC
嵌入式linux总线设备驱动模型分析
嵌入式linux总线设备驱动模型分析
32 1
|
2月前
|
Linux
嵌入式linux系统设备树实例分析
嵌入式linux系统设备树实例分析
39 0
|
2月前
|
监控 Shell Linux
【Shell 命令集合 网络通讯 】Linux 分析串口的状态 statserial命令 使用指南
【Shell 命令集合 网络通讯 】Linux 分析串口的状态 statserial命令 使用指南
33 0
|
2月前
|
消息中间件 存储 安全
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
【深入浅出RocketMQ原理及实战】「底层原理挖掘系列」透彻剖析贯穿RocketMQ的消息顺序消费和并发消费机制体系的原理分析
28 0
|
5天前
|
人工智能 Ubuntu 机器人
AI电销机器人系统源码部署之:freeswitch安装Linux
在Linux服务器上安装FreeSWITCH的简要步骤:更新软件包,安装依赖(如build-essential,libssl-dev等),下载v1.10.7源代码,解压并配置,编译,然后运行`./bootstrap.sh -j`,`./configure`,`make`,`make install`。启动FreeSWITCH服务,配置SIP用户和路由,测试连接与通话,并确保防火墙打开SIP(5060)和RTP端口。注意,实际部署可能需按需求调整。
|
8天前
|
Linux 开发工具 Android开发
Docker系列(1)安装Linux系统编译Android源码
Docker系列(1)安装Linux系统编译Android源码
15 0
|
28天前
|
Prometheus 监控 数据可视化
linux分析方法与技巧
【4月更文挑战第3天】在Linux环境中,进行日志分析和系统性能分析的关键方法包括:使用`cat`, `less`, `tail`查看和过滤日志,`logrotate`管理日志文件,`rsyslog`或`syslog-ng`聚合日志,以及通过`top`, `mpstat`, `pidstat`, `free`, `iostat`, `netstat`, `strace`, `sar`, `dstat`等工具监控CPU、内存、磁盘I/O和网络。对于高级分析,可利用Brendan Gregg的性能工具,以及Grafana、Prometheus等可视化工具。
19 2
linux分析方法与技巧
|
1月前
|
编解码 Ubuntu 算法
【Linux】NUC977移植使用MQTT(基于mosquitto)
【Linux】NUC977移植使用MQTT(基于mosquitto)