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