提问者:小点点

服务器必须处理从客户端发送的第二个CONNECT数据包作为违反协议并断开旧客户端或新客户端的连接?


根据MQTT协议3.1.1,“客户端只能通过网络连接发送一次CONNECT数据包。服务器必须处理从客户端发送的第二个CONNECT数据包作为违反协议并断开客户端”。但是我很困惑服务器必须断开前一个还是新一个?

我用MQTT测试了它,我使用了两个会话来用同一个客户端ID订阅同一个主题。这是否意味着同一个客户端发送了两次CONNECT?如果这是真的,我真的很困惑。

新用户会导致服务器断开旧用户的连接。这与协议不同。当旧用户断开连接时,它会尝试发送CONNECT并等待CONNACT数据包。然后它转向新客户端,服务器断开前一个新用户的连接……

那么协议是什么意思?服务器必须处理从客户端发送的第二个CONNECT数据包作为违反协议并断开旧客户端或新客户端的连接?


共1个答案

匿名用户

你在这里混淆了两个独立的事件。

首先,如果单个客户端在同一网络连接上发送2个连接数据包,则代理将断开该客户端的连接。

您提到的第二个实例是具有相同客户端ID的2个客户端。即使来自同一主机,这也将是2个独立的网络连接。这些客户端中的每一个都将发送一个连接数据包,但由于会有客户端ID冲突,当第二个到达时,发送数据包的第一个客户端将断开连接