全部產品
Search
文件中心

ApsaraMQ for MQTT:會話到期

更新時間:Aug 22, 2024

本文為您介紹MQTT 5.0的新特性會話到期。

功能介紹

會話到期(Session Expiry Interval)是指在用戶端和服務端(Broker)之間的會話結束後,工作階段狀態資料被保留一段時間。工作階段狀態包括未確認的QoS 1訊息、用戶端的訂閱等。會話到期時間可以在用戶端串連到MQTT服務端的時候,在CONNECT訊息的會話到期間隔(Session Expiry Interval)欄位中指定。

使用限制

  • 如果沒有設定則預設為0,中斷連線會話立即到期。如果設定了到期時間則最小到期間隔不少於10分鐘,小於10分鐘的情況下,按照10分鐘設定。

  • 會話到期時間最大值為:2147483647。

  • 如果有且僅訂閱使用了P2P訊息,則不支援Session到期特性。

使用說明

  • 會話到期時間(單位:秒):

    • 設定為“0”表示會話結束後立即到期。

    • 設定大於0的值表示會話將保持多長時間。

使用情境

  • 斷連重連情境:在網路不穩定或者移動環境中,例如車連網,用戶端的串連可能頻繁中斷,通過設定較長的會話到期時間,確保串連重建後會話可以無縫恢複。

  • 臨時裝置串連:對於那些短暫串連、發送少量資料後即中斷連線的裝置(如一次性資料上報裝置或臨時加入網路的感應器),可以設定較短的會話到期時間,這樣可以有效釋放伺服器資源,避免無用會話佔用儲存。

  • 安全與隱私保護:在對資料保密性和隱私人嚴格要求的應用中,可以設定合理的會話到期時間,確保在用戶端長時間不活動後,其工作階段狀態和相關資料被自動清除,降低資料泄露的風險。

MQTT 5.0的會話到期的功能,可以以根據不同的應用情境靈活調整會話到期時間,以達到最佳的系統效能、資源使用率和使用者體驗。

訊息樣本

例如,有一個應用情境,其中一個IoT裝置需要經常斷開並重新串連到MQTT服務端。為了在裝置斷線時不丟失其訂閱和訊息,這時可以使用MQTT 5.0的會話到期特性。

此處展示該特性在裝置首次串連和後續重串連時的使用:

首次串連

裝置首次串連到MQTT服務端,發送一個CONNECT訊息,並設定會話到期間隔為4個小時。這意味著即使裝置中斷連線,MQTT服務端將保留其工作階段狀態(包括訂閱和隊列中的訊息)最多4個小時。

CONNECT
ClientId: IoT_Device123
Session Expiry Interval: 14400 // 4小時,以秒為單位
Clean Start: 0 // 用於指示服務端繼續使用現有的會話
// 其他需的CONNECT報文資訊

在這4個小時內,如果裝置因為網路問題導致串連斷開,MQTT服務端會保持該裝置的所有訂閱和未確認的訊息。

重串連

CONNECT
ClientId: IoT_Device123
Session Expiry Interval: 14400 // 再次指定為4小時
Clean Start: 0 //告訴服務端使用上次儲存的會話
// 其他需的CONNECT報文資訊

當IoT裝置恢複串連時,由於之前的會話並未到期,服務端將使用之前儲存的工作階段狀態,包括IoT裝置的訂閱資訊,以及它因斷線而未能收到的任何訊息,這一切將在重串連後送達給裝置。

逾時情形

如果IoT裝置在超過4個小時而沒有重連,那麼MQTT服務端就會清除相關的工作階段狀態。此時,如果IoT裝置再次串連,它需要像首次串連一樣重建立立新的會話,包括重新訂閱所需的主題,並且先前隊列中的訊息則會丟失。