基本概念
MQTT
(Message Queuing Telemetry Transport
)是基于TCP/IP
协议栈构建的异步通信消息协议,是一种轻量级的发布/订阅型消息传输协议,特别适用于物联网应用。采用简洁的协议设计和低带宽消耗,能够在不可靠的网络环境下可靠地传输消息。
MQTT
是一个客户端服务端架构的发布/订阅模式的消息传输协议。MQTT
中的客户端既能发送消息也能接收信息。发送消息的客户端先要把信息发送到服务端(MQTT
服务器),服务端先把信息进行必要的保存(提升MQTT
传输信息的稳定性)。在判断转发给哪些客户端,订阅了相关主题的客户端将收到信息。MQTT
客户端在发送信息的同时也可能在接收信息。发布者可以订阅自己发布的主题从而收到自己发送的信息
消息结构:主题Topic
(字符串) 负载Payload
(字符串)
发布者Publisher
服务器Broker
订阅者:Subscriber
只要订阅者订阅了发布者发布的主题的消息,任何的订阅者够可以收到消息。
MQTT
发布/订阅特性:
客户端在发布和订阅信息时,可以相互独立(发布者/订阅者不管平台上有多少客户端订阅了该主题),且在空间上可以分离(客户端的空间位置可以在不同的地方),时间上可以异步(信息在发送接收的时间上可能不同步,受网络因素影响,服务器转发给订阅者的信息可能会有延迟)。
MQTT
的优点:
- 轻巧高效(客户端小,消息头小以优化网络带宽)
- 双向通讯
- 可扩展大量连接设备
- 消息传输可靠,启用安全。
MQTT
主题
主题是字符串,区分大小写,主题是可以使用空格的(建议不要使用),不建议使用中文字符
主题分级:MQTT
主题各个级别之间使用/来分隔。如:Tyler-1/motor/1/speed
主题分为四个级别
主题通配符
单级别的通配符:+ (可以替代一个
MQTT
主题级别)如:订阅了主题Tyler-1/motor/+/speed
,则可以收到以下主题的信息Tyler-1/motor/1/speed Tyler-1/motor/2/speed Tyler-1/motor/3/speed
多级别的通配符:# 可以涵盖任意数量的主题级别,多级通配符必须是主题中的最后一个字符,如订阅了该主题
Tyler-1/motor/#
则可以收到Tyler-1/motor/1/speed Tyler-1/motor/2/temperature
的信息
以$开始的主题是MQTT
服务端系统保留的特殊主题,我们不能随意的订阅或发送消息。