MQTT协议是
- 对TCP/IP协议的封装和重构。
- 最小代码占用,最小报文开支,适用于处理能力不强,网络带宽不高的设备,如各类传感器。
- 保证消息顺序性
- 支持连续的会话控制
- 支持服务质量管理
- 支持动态创建主题
- 消息支持一对一,一对多。支持集群模式,支持广播模式。
名词解释
网络连接
客户端连接到服务器之后,提供双向,有序,无损的发送方式。
消息
MQTT在网络上传输的消息,由主题名(topic),服务质量(Qos)、负载消息(payload)等组成。
Topic
MQTT通过主题对消息进行分类,通过增加反斜杠对消息进行分级。主题不需要提前配置,直接使用。
还可以使用通配符匹配主题,+
代表一级,#
表示本机及下面所有级。
例:
beijing/library
表示北京市的图书馆beijing/hospital/jishuitan
表示北京市的积水潭医院+/library
表示所有地区的图书馆beijing/#
北京的所有场所(library和hospital)
服务质量
MQTT提供了三种消息传输质量
- 0:你收没收到我不管,反正我发了
- 1:怎么着都会收到一次,有可能会收到重复消息。
- 2:只会收到一次消息。
质量0适合消息丢失几次影响也不大的场景,如温度传感器每隔一段时间发送一次当前温度,如果间隔够小,丢失一两次影响不是很大
质量2,这种精准的方式牺牲的是来回多次的确认消息而增加网络开销。
质量1,既不会丢失消息,也没有那么大的网络开销,只有一个确认重发机制的开销。适合于日志处理。
有效负载
二进制数组,实际业务场景可以通过JSON方法包装数据再转为二进制数组。
客户端
- 与服务器建立和断开连接
- 发布主题消息
- 订阅主题消息
- 转发主题消息
服务器
- 与客户端建立和断开连接
- 满足订阅和取消订阅的要求
- 完成基于订阅主题的消息分发