這篇文章主要講解了“MQTT 5.0的Clean Start與Session Expiry Interval是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MQTT 5.0的Clean Start與Session Expiry Interval是什么”吧!
在紅塔等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網站建設、網站制作 網站設計制作定制網站制作,公司網站建設,企業(yè)網站建設,成都品牌網站建設,成都全網營銷,外貿網站建設,紅塔網站建設費用合理。
如果 Clean Session 設置為 0,服務端必須使用與 Client ID 關聯(lián)的會話來恢復與客戶端的通信。如果不存在這樣的會話,服務器必須創(chuàng)建一個新會話??蛻舳撕头掌髟跀嚅_連接后必須存儲會話的狀態(tài)。
如果 Clean Session 設置為 1,客戶端和服務器必須丟棄任何先前的會話并創(chuàng)建一個新的會話。該會話的生命周期將和網絡連接保持一致,其會話狀態(tài)一定不能被之后的任何會話重用。
可以看出,MQTT 期望通過這種持久會話的機制避免客戶端掉線重連后消息的丟失,并且免去客戶端連接后重復的訂閱流程。這一功能在帶寬小,網絡不穩(wěn)定的物聯(lián)網場景中非常實用。但 Clean Session 同時限定了客戶端和服務器在連接和斷開連接兩種狀態(tài)下的行為,這并不是一個很好的實現(xiàn)。此外,在某些場景下會話并不需要服務器永久保留自己的狀態(tài)時,這個機制將會導致服務器資源的浪費。
如果 CONNECT 報文中的 Clean Start 為 1,客戶端和服務端必須丟棄任何已存在的會話,并開始一個新的會話。
如果 CONNECT 報文中的 Clean Start 為 0 ,并且存在一個關聯(lián)此客戶端標識符的會話,服務端必須基于此會話的狀態(tài)恢復與客戶端的通信。如果不存在任何關聯(lián)此客戶端標識符的會話,服務端必須創(chuàng)建一個新的會話。
Session Expiry Interval 以秒為單位,如果 Session Expiry Interval 設置為 0 或者未指定,會話將在網絡連接關閉時結束。
如果 Session Expiry Interval 為 0xFFFFFFFF ,則會話永不過期。
如果網絡連接關閉時(DISCONNECT 報文中的 Session Expiry Interval 可以覆蓋 CONNECT 報文中的設置) Session Expiry Interval 大于0,則客戶端與服務端必須存儲會話狀態(tài) 。
現(xiàn)在,Clean Start 替代了原先的 Clean Session,但不再用于指示是否存儲會話狀態(tài),僅用于指示服務端在連接時應該嘗試恢復之前的會話還是直接創(chuàng)建全新的會話。會話狀態(tài)在服務端的存儲時長則完全交給 Session Expiry Interval 決定。
前面還提到,MQTT v5.0 支持客戶端在斷開連接時重新指定 Seesion Expiry Interval。這樣我們可以非常容易地滿足類似客戶端網絡連接異常斷開時會話狀態(tài)被服務器保留,客戶端正常下線時會話則隨著連接關閉而結束的場景,只需要客戶端在斷開連接時將 Session Expiry Interval 設置為 0 即可。即便是一個已經永不過期的會話,客戶端也可以在下一次連接中通過設置 Clean Start 為 1 來 "反悔"。
Clean Start 與 Session Expiry Interval 不僅解決了 Clean Session 的遺留問題,同時也擴展了客戶端的使用場景,使 MQTT 協(xié)議在受限的網絡環(huán)境下更加實用。
感謝各位的閱讀,以上就是“MQTT 5.0的Clean Start與Session Expiry Interval是什么”的內容了,經過本文的學習后,相信大家對MQTT 5.0的Clean Start與Session Expiry Interval是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關知識點的文章,歡迎關注!