Qos=0,至多一次
对于client而言,有且仅发一次publish包,对于broker而言,有且仅发一次publish,简而言之,就是仅发一次包,是否收到完全不管,适合那些不是很重要的数据。
Qos=1,至少一次
流程:(publisher -> broker)
- publisher store msg -> publish ->broker (传递message)
- broker -> puback -> publisher delete msg (确认传递成功)
流程:(broker -> subscriber)
- broker store msg - > publish -> subscriber
- subscribe-> puback -> broker delete msg
发布者publisher如果没有收到代理服务器broker的puback那么publisher就会一直发送publish,同理,代理服务器broker如果没有收到订阅者subscribe的puback那么broker也会一直发送publish。
Qos=2 有且只有一次
流程:(publisher ->broker)
- publisher store msg -> publish -> broker store msg (传递message)
- broker -> pubrec -> publisher (通知publisher传递成功)
- publisher -> pubrel -> broker (通知broker发起传递消息到subscriber的流程)
- broker -> pubcomp -> publisher delete msg (通知publisher删除msg)
流程:(broker -> subscribe)
- broker store msg -> publish -> subsriber store msg (传递message到subscriber)
- subsriber -> pubrec -> broker (通知broker传递成功)
- broker -> pubrel -> subscriber (通知启用msg)
- subscriber -> pubcomp -> broker delete msg (通知broker删除msg)
publisher发送消息并保存消息并保存到broker后,broker通知publisher发送成功,publisher再通知broker发起传递消息到subscriber的流程后删除msg,broker通知publisher删除msg。
双端Qos的关系(Qos向下兼容)
mqtt中文网官方文档http://mqtt.p2hp.com/mqtt311