MQTT框架
1. MQTT概述
MQTT通信模型示意图如下:
使用电视台、记者、观众三个角色来类比更容易理解:
- 电视台:在MQTT里被称为服务器(broker),有如下作用
- 接受来自客户的网络连接; // 记者/观众连接进电视台
- 接受客户发布的应用信息; // 接受记者发布的消息
- 处理来自客户端的订阅和退订请求; // 处理观众的订阅、退订请求
- 向订阅的客户转发应用程序消息 // 给观众转发记者报道的消息
- 记者和观众都是客户端,记者也可以当观众,观众也可以当记者,有如下作用:
- 发布信息; // publish,记者
- 订阅消息;// Subscribe ,观众
- 退订或删除消息;
- 断开与服务器连接
1.2 消息的传递
还是以日常生活为例,提几个问题:
- 观众:我只关心财经新闻,那么只订阅"财经新闻",不订阅"体育新闻"
- 记者:我是财经记者,我可以发布"财经新闻",不发布"体育新闻"
这个过程中,引入两个概念:
- 主题(Topic):是财经类的?还是体育类的?
- 消息(Message)或负载(Playload):具体的新闻信息
具体的流程是这样的:
- 观众打电话到电视台:connect
- 观众向电视台订阅"财经新闻": Subscribe 某个 Topic
- 记者打电话到电视台:connect
- 记者向电视台发布"财经新闻":Public某个Topic的某个Playload
- 电视台向"订阅了财经新闻的观众"发布"某条消息":Public某个Playload给Subscriber
整个过程中,电视台和记者、电视台和观众直接的电话要保存连接状态,还要时不时确认一下:
- 记者要时不时给电视台喊一声"喂":确保电视台还正常
- 观众要时不时给电视台喊一声"喂":确保电视台还正常
2. 在Windows上体验MQTT
2.1 安装APP
安装这2个APP:
2.2 启动服务器
使用DOS命令行,进入mosquitto-2.0.14-install-windows-x64的安装目录,执行命令:
1. cd "c:\Program Files\mosquitto" 2. .\mosquitto.exe -v
在下面的实验中,无论是使用MQTTX还是使用mosquitto_pub/mosquitto_sub,都要保持mosquitto.exe在运行。
2.3 使用MQTTX
2.3.1 建立连接
运行MQTTX后,如下图操作:
2.3.2 订阅主题
建立连接后,如下图操作:
2.3.3 发布主题
如下操作:
2.4 使用mosquitto
2.4.1 发布消息
参数说明:
mosquitto_pub 命令参数说明 1. -d 打印debug信息 2. -f 将指定文件的内容作为发送消息的内容 3. -h 指定要连接的域名 默认为localhost 4. -i 指定要给哪个clientId的用户发送消息 5. -I 指定给哪个clientId前缀的用户发送消息 6. -m 消息内容 7. -n 发送一个空(null)消息 8. -p 连接端口号 9. -q 指定QoS的值(0,1,2) 10. -t 指定topic 11. -u 指定broker访问用户 12. -P 指定broker访问密码 13. -V 指定MQTT协议版本 14. --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用 15. --will-qos Will的QoS值。该参数需要与--will-topic一起使用 16. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用 17. --will-topic 用户发送Will消息的topic
使用DOS命令行,进入mosquitto-2.0.14-install-windows-x64的安装目录,执行命令:
cd "c:\Program Files\mosquitto"
.\mosquitto_pub.exe -h 127.0.0.1 -p 1883 -t "100ask"
如图:
2.4.2 订阅消息
参数说明:
mosquitto_sub 命令参数说明
1. -c 设定‘clean session’为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。
2. -d 打印debug信息
3. -h 指定要连接的域名 默认为localhost
4. -i 指定clientId
5. -I 指定clientId前缀
6. -k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。
7. -q 指定希望接收到QoS为什么的消息 默认QoS为0
8. -R 不显示陈旧的消息
9. -t 订阅topic
10. -v 打印消息
11. --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用
12. --will-qos Will的QoS值。该参数需要与--will-topic一起使用
13. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用
14. --will-topic 用户发送Will消息的topic
使用DOS命令行,进入mosquitto-2.0.14-install-windows-x64的安装目录,执行命令:
1. cd "c:\Program Files\mosquitto" 2. .\mosquitto_pub.exe -h 127.0.0.1 -p 1883 -t "100ask"
如图:
2.4.2 订阅消息
参数说明:
mosquitto_sub 命令参数说明 1. -c 设定‘clean session’为无效状态,这样一直保持订阅状态,即便是已经失去连接,如果再次连接仍旧能够接收的断开期间发送的消息。 2. -d 打印debug信息 3. -h 指定要连接的域名 默认为localhost 4. -i 指定clientId 5. -I 指定clientId前缀 6. -k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。 7. -q 指定希望接收到QoS为什么的消息 默认QoS为0 8. -R 不显示陈旧的消息 9. -t 订阅topic 10. -v 打印消息 11. --will-payload 指定一个消息,该消息当客户端与broker意外断开连接时发出。该参数需要与--will-topic一起使用 12. --will-qos Will的QoS值。该参数需要与--will-topic一起使用 13. --will-retain 指定Will消息被当做一个retain消息(即消息被广播后,该消息被保留起来)。该参数需要与--will-topic一起使用 14. --will-topic 用户发送Will消息的topic
使用DOS命令行,进入mosquitto-2.0.14-install-windows-x64的安装目录,执行命令:
MQTT框架和使用-2