MQTT简介
MQTT(Message Queue Telemetry Transport 消息队列遥测传输)是一种客户端服务端发布订阅消息传输的协议。它具有轻量级、开源、简单以及易于接入的特点。正是因为这些特点,使得其可以应用于各种使用场景,包括远程端对端的交互,物联网等。
MQTT用于收发消息的主要组件有:
- Publisher(发布者)
- Broker(代理)
- Subscriber(订阅者)
三者的关系如下图:
从图中可以看出,如果把发送消息或接收消息的端成为Client,那么一个Client即可以是发布者(Publisher)也可以是订阅者(Subscriber)。因为一个client可以通过实现publish接口发送消息,也可以用过实现subscribe接口订阅消息。
代理(Broker)是链接发布者(Publisher)和订阅者(Subscriber)的中心。一个代理可以链接上千个Client。代理的职责是接收所有发布者(Publisher)的消息,判断消息应该发往哪个订阅者(Subscriber)
和AQMP一样,MQTT也是基于TCP/IP协议进行通信的。如下图:
思考点:
- MQTT和AQMP有哪些差异?
- MQTT和HTTP又有哪些差异?
- 代理是通过什么方式判断把发布者(Publisher)的消息分发到对应的订阅者(Subscriber)?
可以带着问题,看看专题文章:MQTT Essentials
在Windows中编译安装MQTT C++客户端
本章主要介绍在Windwos平台下编译安装MQTT的C++库,只介绍编译安装过程,开发教程有时间再另开文章介绍
安装工具及依赖
相关依赖:
- MQTT C语言库:paho.mqtt.c,C++库依赖这个库
- MQTT C++ 语言库:paho.mqtt.cpp
- C++ json解析库:nlohmann/json,用于序列化反序列化消息
需要用到的工具有:
- Cmake:https://cmake.org/, 下载最新版本的CmakeGUI即可;
- Git:https://gitforwindows.org/,安装最新版,需要clone Github的仓库
- Visual Studio Code:https://visualstudio.microsoft.com/zh-hans/downloads/,推荐使用2017
- 文中举例的安装目录:E:\github
下载MQTT C和MQTT C++源码
- 进入到E:\github目录
- 克隆MQTT C++源码到:E:\github\paho.mqtt.cpp
- 进入E:\github\paho.mqtt.cpp,克隆MQTT C源码到:E:\github\paho.mqtt.cpp\paho.mqtt.c
- 下载步骤如图:
编译安装MQTT C库
打开Cmake GUI,,设置源码目录:”Where is the source code“;设置编译目录:”Where to build the binaries”。点击“Configure”按钮,
设置如下图:
点击Finish后会编译一次,但是这里有一些配置不合适,更改配置如下:
接着点击Configure,然后点击Generate,如下图:
点击Open Project开打项目,生成项目,如下图:
MQTT C库编译完成。
进入MQTT C源码目录,执行命令 cmake –build build/ –target install,安装MQTT C库,如下图:
编译安装MQTT C++库
打开Cmake GUI,,设置源码目录:”Where is the source code“;设置编译目录:”Where to build the binaries”。点击“Configure”按钮,
设置如下图:
点击Finish后会编译一次,这里会报错,因为没有配置依赖的C语言库的路径,更改配置如下:
配置完成后,点击Configure和Generate。然后点击Open Project开打项目,生成项目,如下图:
MQTT C++库编译完成。
进入MQTT C++源码目录,执行命令 cmake –build build/ –target install,安装MQTT C++库
至此,MQTT C语言库和MQTT C++库都完成编译并安装。
验证
- 拷贝文件E:\github\paho.mqtt.cpp\build\src\Release\paho-mqttpp3.dll 到目录 E:\github\paho.mqtt.cpp\build\src\samples\Release
- 下载MQTT BOX,mqtt收发消息的桌面客户端
- 使用MQTT BOX链接Server如下图
- 使用MQTT BOX创建发布者如下图:
- 把async_subscribe项目设为启动项,如下图:
- 修改async_subscribe.cpp如下图:
- 启动项目,并通过mqtt box发送消息,如果能收到消息,则安装成功。收到消息的界面如下图:
安装源码下载:
项目:MqttClient
项目是Private的,需要的可以找我。