TCP/IP 模型分为四层,应用层,传输层,网络层,网络接口层 MQTT 是属于应用层,所以只要是支持 TCP/IP 协议栈的地方,都可以支持使用 MQTT MQTT 是一种消息队列传输协议。
订阅者只需要关注订阅的消息,不接收其他非订阅的消息,这样可以避免无效数据造成的存储与处理。 服务器只需要和中间转发的 broker 进行数据交互,再由终端订阅 broker 中间服务提供一对多的消息发布。服务器不再和终端直接建立 1 对 1 的连接,解除应用程序的耦合。
MQTT 区分消息服务质量:
QOS=0 只发送一次,不关注是否送达,适用于非必要连续性消息。
QOS=1 至少一次,确保消息送达,但有可能发生重复。适用于 == ?
QOS=2 只有一次,确保消息只送达一次,例如计费支付系统中会用到该级别,避免消息重复,并且保证消息唯一,确保结果正确。还可以用于微信类的 IM 通讯。
为什么 MQTT 开销很小:
每条消息头的长度固定是 2 字节,节省网络流量,节省数据容量
其余 playload 属于业务数据 。
MQTT 协议中 分为三个部分:
发布者 Publish 一般是客户端(业务服务 也算客户端),
代理 Broker 消息代理中间件转发服务器,
订阅者 Subscribe 一般指终端(它也能 Publish)
Mqtt消息分为
主题 topic ,
负载 payload 两部分 topic 可以理解为消息类型,
订阅者订阅topic后,就会收到topic 对应的消息内容(payload)
payload 可以理解消息的内容,是指订阅者具体要使用的内容。
MQTT 基本订阅与发布的消息流程:
终端 A 连接到 broker 。终端 B 连接到 broker,并且订阅主题 topic1。 终端 A此时发布了一条消息主题为 topic1给 broker; 这会 broker 收到了终端 A 的发布消息 topic1,发现终端 B 已经订阅了 topic1,那么就会将消息转发给终端 B; 终端 B 就会从 broker 收到这条消息了。 如果终端 B 在终端 A 发布之后才订阅的 topic1,那么这会终端 B 就收到不到该条消息了。