MQTT v3.1.1中证书的最大长度(用户名、密码、clientid)。

CONNECT数据包

MQTT CONNECT控制数据包总是包含一个有效载荷。它是第一个数据包,在连接建立后,客户端必须将其发送给服务器。

它只能由客户发送一次,如果发送第二个CONNECT数据包,服务器(经纪人)必须将其作为违反协议处理,并断开客户的连接。

有效载荷可能包含几个不同的字段。

  • 唯一的客户标识符(clientid)--始终存在
  • 将主题
  • 将信息
  • 用户名称
  • 密码(要求用户名也要存在!)。

clientid是必须的,其他字段是可选的。可选字段的存在是由头中的标志决定的。

形象

屏幕截图。OASIS开放式MQTT v3.1.1规范

边界

以下是合规经纪商应支持的限额。

  • clientid: 23个UTF-8编码的字节
  • 用户名称最大。编码后655535字节(UTF-8编码)。
  • 密码:0至65535字节的二进制数据
  • 消息限制大小:268435455字节

以下是客户ID的字符 需要 任何符合MQTT v3.1.1规范的经纪商都可以支持。

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

经纪人可以选择性地支持其他字符和更长的客户ID。

23个字符已经足够了。记住,这些不是比特,而是字符。如果你使用 基地58 编码,例如,你会得到58^23个组合~3,62E+40~362112779466785000000000000000000个组合。如果你不这样做 - 那么甚至更多。

经纪人也可以支持零字节长度的客户ID。在这种情况下,经纪商必须给客户分配一个唯一的客户ID。并非所有的经纪商都支持这一点(按规范为 "MAY")。

用户名必须是一个UTF-8编码的字符串。密码可以是二进制数据。

该信息也可以是二进制数据。

 

加大限制

为了增加VerneMQ中的客户端ID限制,你可以设置一个选项,max_client_id_size。

https://docs.vernemq.com/configuration/nonstandard

它的默认值是23。

客户ID应该是唯一的

在MQTT中,通常客户应该有不同的客户ID,即使他们有不同的用户名。

如果两个客户共享客户端ID,他们将在连接-断开连接的尝试中结束,因为代理通常不允许两个具有相同客户端ID的客户的连接。

(我相信VerneMQ有这个选项,但我也相信它已经被废弃了;无论如何,最好不要在设计时考虑到它,以保持与其他经纪商的兼容!)。

参考资料