本文為您介紹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裝置再次串連,它需要像首次串連一樣重建立立新的會話,包括重新訂閱所需的主題,並且先前隊列中的訊息則會丟失。