我们想了解verneMQ在连接请求中没有客户端ID,客户端只提供注册的用户名、密码、保持活动会话为0,连接超时为60 X 60 X 1000
在这种情况下,VerneMQ是如何管理会话的。如果VerneMQ在连接这样的cleint时重新启动,那么在客户端重新启动后,我们观察到客户端的订阅主题丢失。为什么会有这种行为?
连接时省略ClientId
将使代理为此客户端生成唯一的id(如果允许(。来自MQTT规范:
服务器可能允许客户端提供长度为零字节的ClientId,但如果这样做,则服务器必须将其视为特殊情况,并为该客户端分配唯一的ClientId。然后,它必须处理CONNECT数据包,就好像客户端提供了唯一的ClientId(Oasis MQTT(一样
使用空的ClientId
附带一个条件,即它必须是CleanSession
,否则连接将被拒绝:
如果客户端提供零字节的ClientId,则客户端还必须将CleanSession设置为1
(因为ClientId
对于broker在会话上持久化和恢复至关重要(
由于代理程序将客户端的订阅(以及其他内容(存储在会话中,因此在使用空的ClientId
以及CleanSession=1
时,您总是必须重新订阅所有主题