如果CONNECT期间客户端没有提供客户端ID,VerneMQ(1.10.3部署为容器)的行为是什么



我们想了解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时,您总是必须重新订阅所有主题

最新更新