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

时间:2016-07-12 03:25:09

标签: mqtt

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

我使用MQTT对其进行了测试,并且我使用两个会话来使用相同的客户端ID来包含相同的主题。是否意味着同一个客户端发送CONNECT两次?如果这是真的,那真让我困惑。

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

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

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

你在这里混淆了两个不同的事件。

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

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