全部產品
Search
文件中心

IoT Platform:會話到期

更新時間:Jun 30, 2024

裝置與物聯網平台保持串連時會形成工作階段狀態,工作階段狀態包括訂閱的Topic、保留訊息、遺囑訊息、平台緩衝的QoS1訊息等。會話到期是指當裝置和物聯網平台中斷連線,到期後會話會被刪除。本文為您介紹MQTT 5.0的新特性會話到期。

背景資訊

  • 在MQTT 3.1.1版本中,沒有明確的會話到期概念,只有cleanSession決定裝置重新串連時是否繼續之前的工作階段狀態資訊。一個會話要麼在中斷連線時被清除,要麼會一直保留直到裝置重新串連物聯網平台。

    • cleanSession = true:建連時刪除會話,裝置需要重新訂閱topic,也不會收到物聯網平台緩衝的QoS1訊息。

    • cleanSession = false:建連時保留會話,裝置不需要重新訂閱topic,會收到物聯網平台緩衝的QoS1訊息。

  • 在MQTT 5.0中,明確引入會話到期的概念,用cleanStart替換cleanSession,增加會話到期間隔屬性Session Expiry Interval。這兩個參數提供了比MQTT 3.1.1 中的 cleanSession 更精細的會話控制,可以在裝置中斷連線後的一段時間內保留工作階段狀態,也可以在不需要會話時刪除會話,節約雲端的資源開發,避免收到不符預期的訊息。

    image..png

    • cleanStart是二進位標誌位,在裝置重新串連物聯網平台時,是否開始一個新的會話,並清除任何現有的工作階段狀態資訊。

      • cleanStart=true:建連時刪除之前的會話,裝置端需要重新訂閱topic,也不會收到物聯網平台緩衝的QoS1訊息。

      • cleanStart=false:如果會話沒被刪除,則繼續使用之前的會話。在裝置中斷連線後,會話被保留的時間長度為Session Expiry Interval。如果裝置在保留時間長度內重新串連物聯網平台,則不需要重新訂閱topic,會收到物聯網平台緩衝的QoS1訊息。如果裝置沒有在保留時間長度內重新串連,則會話被刪除,裝置需要重新訂閱Topic,不會收到物聯網平台緩衝的QoS1訊息。

    • Session Expiry Interval代表時間間隔,單位為秒。在這個時間間隔內,裝置中斷連線後,物聯網平台會保留工作階段狀態。如果不設定,時間間隔預設為0。如果設定為0xFFFFFFFF,時間間隔為無限長。

    • 根據會話到期間隔屬性Session Expiry IntervalcleanStart的不同取值,會出現以上四種情況:

      1. cleanStart=trueSession Expiry Interval=0。裝置中斷連線時立即清理會話,裝置重新串連時需要建立新的會話。

      2. cleanStart=trueSession Expiry Interval=∞,與情況一的結果相同。只要cleanStart=true,裝置就會在重新串連時建立新的會話,無論Session Expiry Interval取值多少。

      3. cleanStart=falseSession Expiry Interval>0但小於裝置斷開的時間間隔。會話保留的時間較短,在裝置重新串連前物聯網平台,會話已被刪除。

      4. cleanStart=falseSession Expiry Interval=∞。會話保留的時間無限長,裝置重新串連後繼續使用之前的會話。

使用情境

裝置頻繁掉線

對於車輛等持續移動的裝置,如果經常清除會話,會導致頻繁的訂閱。這種情況適用於上圖的情況3,如果裝置在一定時間內重連就複用會話,當裝置長時間不能串連時清除會話,避免接收處理到期的訊息。

訊息不能丟失的裝置

對於POS機、播報音箱等金融裝置,對訊息的到達率要求非常高,適用於上圖的情況4。

會話從建立到結束保持一致,不會丟失訂閱關係和訊息。

狀態無關的裝置

對於廣告屏裝置,持續更新播放新的廣告內容,不需要接收到期訊息,適用於上圖的情況1。

不保留會話,可以避免收到無效到期的內容,也可以節約雲端的資源消耗。