是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上 由IBM在1999年发布 该协议⽀持所有平台,几乎可以把所有联⽹物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议 MQTT官网: http://mqtt.org
匹配单个topic
- / # 订阅 /
- /house # 订阅house
- house/room1/main-light # 订阅房间1的main light
- house/room1/side-light # 订阅房间1的side light
匹配多个topic(# 和+是通配符, #匹配多层级 +匹配单层级)
- house/+/main-light # 订阅house中所有的main light
- house/# # 订阅house中的所有topic
- # # 订阅所有topic
举个栗子(使用mosquitto,具体安装方法比较简单请自行搜索(- _ - !) ) 订阅
mosquitto_sub -t house/room1/main-light
发布
mosquitto_pub -t house/room1/main-light -m 'hello mqtt!' -q 1 # -t 主题 -q 消息质量
MQTT客户端向服务器发起CONNECT请求时,通过KeepAlive参数设置保活周期
客户端在无报文发送时,按KeepAlive周期定时发送2字节的PINGREQ心跳报文,服务端收到PINGREQ报文后,回复2字节的PINGRESP报文
服务端在1.5个心跳周期内,既没有收到客户端发布订阅报文,也没有收到PINGREQ心跳报文时,主动心跳超时断开客户端TCP连接
MQTT客户端向服务器端CONNECT请求时,可以设置是否发送遗愿消息(Will Message)标志,和遗愿消息主题(Topic)与内容(Payload)
MQTT客户端异常下线时(客户端断开前未向服务器发送DISCONNECT消息),MQTT消息服务器会发布遗愿消息
如下发布消息
mosquitto_pub -r -q 1 -t house/room1/main-light -m 'hello mqtt!'
客户端再次连上的时候可以收到该消息
mosquitto_sub -t house/room1/main-light -q 1