五分钟系列之入门mqtt

1. MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)

是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上 由IBM在1999年发布 该协议⽀持所有平台,几乎可以把所有联⽹物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议 MQTT官网: http://mqtt.org

2. 特点

  • 开放消息协议,简单易实现
  • 发布订阅模式,一对多消息发布
  • 基于TCP/IP网络连接
  • 1字节固定报头,2字节心跳报文,报文结构紧凑
  • 消息QoS支持,可靠传输保证

3. mqtt使用主题(topic)的形式进行路由定义,类似URL, 如:

匹配单个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 消息质量

4. qos(服务质量, 说明: 客户端和服务端保持一致)

  • 值 0:至多一次,消息基本上仅传送一次,如果当时客户端不可用,则会丢失该消息 比较鸡肋,但性能损耗最小,因为消息只发一次, 但可能会丢失数据
  • 值 1:至少一次,消息应传送至少 1 次 可能会重复发送消息,性能在0-2之间,常用值
  • 值 2:只有一次,确保消息到达一次 安全性最高,能够确保消息到达一次,但性能最差,适合对重要数据的场景使用

心跳机制

  • MQTT客户端向服务器发起CONNECT请求时,通过KeepAlive参数设置保活周期

  • 客户端在无报文发送时,按KeepAlive周期定时发送2字节的PINGREQ心跳报文,服务端收到PINGREQ报文后,回复2字节的PINGRESP报文

  • 服务端在1.5个心跳周期内,既没有收到客户端发布订阅报文,也没有收到PINGREQ心跳报文时,主动心跳超时断开客户端TCP连接

遗愿消息(Last Will)

  • MQTT客户端向服务器端CONNECT请求时,可以设置是否发送遗愿消息(Will Message)标志,和遗愿消息主题(Topic)与内容(Payload)

  • MQTT客户端异常下线时(客户端断开前未向服务器发送DISCONNECT消息),MQTT消息服务器会发布遗愿消息

保留消息(Retained Message)

  • MQTT客户端向服务器发布(PUBLISH)消息时,可以设置保留消息(Retained Message)标志
  • 保留消息(Retained Message)会驻留在消息服务器,后来的订阅者订阅主题时仍可以接收该消息

如下发布消息

mosquitto_pub -r -q 1 -t house/room1/main-light -m 'hello mqtt!'

客户端再次连上的时候可以收到该消息

mosquitto_sub -t house/room1/main-light -q 1
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2024

备案号:京ICP备15003423号-3