php mqtt qos,Mqtt Qos 深度解读
1.QoS含義 :
Quality of Service,服務(wù)質(zhì)量
2.作用域
發(fā)布者的Qos
訂閱者的Qos
3.等級與作用
level 0:最多一次的傳輸
level 1:至少一次的傳輸,(雞肋)
level 2: 只有一次的傳輸
4.交互過程
qos0
對于qos1而言,對于client而言,有且僅發(fā)一次publish包,對于broker而言,有且僅發(fā)一次publish,簡而言之,就是僅發(fā)一次包,是否收到完全不管,適合那些不是很重要的數(shù)據(jù)。
qos0.png
qos1
對于qos0而言,這個交互就是多了一次ack的作用,但是會有個問題,盡管我們可以通過確認來保證一定收到客戶端或服務(wù)器的message,但是我們卻不能保證message僅有一次,也就是當(dāng)client沒收到service的puback或者service沒有收到client的puback,那么就會一直發(fā)送publisher
流程:(publisher -> broker)
publisher store msg -> publish ->broker (傳遞message)
broker -> puback -> publisher delete msg (確認傳遞成功)
注意:
publisher必須保存msg,這樣才能在重發(fā)
publisher如果在一定時間或socket斷開等異常情況,會繼續(xù)重發(fā)msg
qos1.png
qos2
對于qos1而言,qos2可以實現(xiàn)僅僅接受一次message,其主要原理(對于publisher而言),
publisher和broker進行了緩存,其中publisher緩存了message和msgID,而broker緩存了msgID,兩方都做記錄所以可以保證消息不重復(fù),但是由于記錄是需要刪除的,這個刪除流程同樣多了一倍
流程:(publisher -> broker)
publisher store msg -> publish ->broker -> broker store msgID(傳遞message)
broker -> puberc (確認傳遞成功)
publisher -> pubrel -> broker delete msgID (告訴broker刪除msgID)
broker -> pubcomp -> publisher delete msg (告訴publisher刪除msg)
注意:
第二步,即puberc不可以刪除 publisher的msg,因為第三步未必成功,這個時候就需要第一步提醒第二步繼續(xù)發(fā),而提醒必須要msgID
qos2.png
5.問題
1.為什么 qos2不是3次,不和tcp握手一致
2.Qos對協(xié)議的影響
6.參考
總結(jié)
以上是生活随笔為你收集整理的php mqtt qos,Mqtt Qos 深度解读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础(六)--类与对象
- 下一篇: 小小算法题(CCF)