会话过期
本文为您介绍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设备再次连接,它需要像首次连接一样重新建立新的会话,包括重新订阅所需的主题,并且先前队列中的消息则会丢失。