MQTT——服务质量Qos
目錄
Qos簡介
Qos等級及其說明
?Qos的重要性
Qos工作模式
Qos=0
Qos=1
Qos=2
寫MQTT項目的時候,沒有感受到Qos服務質量參數的重要性,直到報錯后一直無法解決,在曾經的代碼嘗試無誤,合成的項目中就出現了錯誤,仔細對比代碼邏輯是一樣的,只有服務質量不同,抱著嘗試的態度試了試,果然可以!
Qos簡介
QoS(Quality of Service,服務質量)指一個網絡能夠利用各種基礎技術,為指定的網絡通信提供更好的服務能力,是網絡的一種安全機制, 是用來解決網絡延遲和阻塞等問題的一種技術。QoS的保證對于容量有限的網絡來說是十分重要的,特別是對于流多媒體應用,例如VoIP和IPTV等,因為這些應用常常需要固定的傳輸率,對延時也比較敏感。(百度百科)
當網絡發生擁塞的時候,所有的數據流都有可能被丟棄;為滿足用戶對不同應用不同服務質量的要求,就需要網絡能根據用戶的要求分配和調度資源,對不同的數據流提供不同的服務質量:對實時性強且重要的數據報文優先處理;對于實時性不強的普通數據報文,提供較低的處理優先級,網絡擁塞時甚至丟棄。QoS應運而生。支持QoS功能的設備,能夠提供傳輸品質服務;針對某種類別的數據流,可以為它賦予某個級別的傳輸優先級,來標識它的相對重要性,并使用設備所提供的各種優先級轉發策略、擁塞避免等機制為這些數據流提供特殊的傳輸服務。配置了QoS的網絡環境,增加了網絡性能的可預知性,并能夠有效地分配網絡帶寬,更加合理地利用網絡資源。
Qos等級及其說明
MQTT設計了一套保證消息穩定傳輸的機制,包括消息應答、存儲和重傳。在這套機制下,提供了三種不同層次QoS(Quality of Service):
- QoS0,At most once,至多一次;
- QoS1,At least once,至少一次;
- QoS2,Exactly once,確保只有一次。
QoS 是消息的發送方(Sender)和接受方(Receiver)之間達成的一個協議:
- QoS=0 代表,Sender 發送的一條消息,Receiver 最多能收到一次,也就是說 Sender 盡力向 Receiver 發送消息,如果發送失敗,也就算了;
- QoS=1 代表,Sender 發送的一條消息,Receiver 至少能收到一次,也就是說 Sender 向 Receiver 發送消息,如果發送失敗,會繼續重試,直到 Receiver 收到消息為止,但是因為重傳的原因,Receiver 有可能會收到重復的消息;
- QoS=2 代表,Sender 發送的一條消息,Receiver 確保能收到而且只收到一次,也就是說 Sender 盡力向 Receiver 發送消息,如果發送失敗,會繼續重試,直到 Receiver 收到消息為止,同時保證 Receiver 不會因為消息重傳而收到重復的消息。
?Qos的重要性
QoS 是MQTT的一個主要的功能。它使得在一個不穩定的網絡環境里的信息交換更加的簡單,因為協議控制了中繼并保證了信息的交付,忽略了不可靠的下層的交互。并且,它授權給客戶端來根據客戶端的程序邏輯,網絡可靠程度來決定QoS等級。
Qos工作模式
Qos=0
保證一次信息盡力交付,發出去了就不管了
?
?
Qos=1
保證消息可以被至少接受發送一次給接受者,可能被重復接受
發送者將會存儲發送的信息直到發送者收到一次來自接收者的PUBACK格式的應答。
?
?
Qos=2
保證消息發送出去后,接收方接受且只接受一次,是最安全也是最慢的服務
如果接收端接收到了一個QoS 的PUBLISH消息,它將相應地處理?PUBLISH消息,并通過PUBREC消息向發送方確認。
?
使用 QoS0:
- Client 和 Broker 之間的網絡連接非常穩定,例如一個通過有線網絡連接到 Broker 的測試用 Client;
- 可以接受丟失部分消息,比如你有一個傳感器以非常短的間隔發布狀態數據,所以丟一些也可以接受;
- 你不需要離線消息。
使用 QoS1:
- 你需要接收所有的消息,而且你的應用可以接受并處理重復的消息;
- 你無法接受 QoS2 帶來的額外開銷,QoS1 發送消息的速度比 QoS2 快很多。
使用 QoS2:
- 你的應用必須接收到所有的消息,而且你的應用在重復的消息下無法正常工作,同時你也能接受 QoS2 帶來的額外開銷。
(參考百度百科)
?
總結
以上是生活随笔為你收集整理的MQTT——服务质量Qos的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20189320《网络攻防》第八周作业
- 下一篇: 每日170219-20