【发布时间】:2018-07-11 06:04:00
【问题描述】:
我一直在尝试使用https://www.npmjs.com/package/mqtt模拟大量发布,发现队列一次容纳的消息不超过65535条。 (如果我尝试发送更多,剩余的将被丢弃)这是有原因的吗?是否有任何解决方法?
【问题讨论】:
我一直在尝试使用https://www.npmjs.com/package/mqtt模拟大量发布,发现队列一次容纳的消息不超过65535条。 (如果我尝试发送更多,剩余的将被丢弃)这是有原因的吗?是否有任何解决方法?
【问题讨论】:
因为这是 MQTT spec 中允许的最大数据包 ID 数
数据包 ID 是一个 16 位数字(最大 65535),并且对于所有飞行消息必须是唯一的。
订阅、取消订阅和发布(在 QoS > 0 的情况下)控制 数据包必须包含一个非零的 16 位数据包标识符 [MQTT-2.3.1-1]。每次客户端发送其中一个的新数据包时 类型它必须为它分配一个当前未使用的数据包标识符 [MQTT-2.3.1-2]。如果客户端重新发送一个特定的控制包,那么 它必须在随后的重新发送中使用相同的数据包标识符 包。包标识符在 客户端已经处理了相应的确认包。在里面 在 QoS 1 PUBLISH 的情况下,这是对应的 PUBACK;在这种情况下 QoS 2 是 PUBCOMP。对于 SUBSCRIBE 或 UNSUBSCRIBE 它是 相应的 SUBACK 或 UNSUBACK [MQTT-2.3.1-3]。相同的条件 当服务器发送具有 QoS > 0 [MQTT-2.3.1-4] 的 PUBLISH 时适用于服务器。
【讨论】: