0

我正在使用 MQTT 开发 M2M 应用程序(在 C# 中,虽然我看不出这有什么关系)。我已经向代理发布了一条消息,其中 aQoS为 1 且RETAIN位为 ON。当我随后订阅该主题(订阅QoS为 0)时,我收到一条 PUBLISH 消息,并且标题显示它的 aQoS为 0。

我遇到的问题是该主题的可变标头包含一个消息 ID,但我无法以编程方式知道它的存在。规范似乎表明 MessageID 仅应在QoS设置 a 或 1 或 2 时出现,但传入数据包的字节 0 显然是 0x31(消息类型为0,PUBLISH= 1)。QoSRETAIN

现在我的解决方法是反序列化数据,如果出现异常,我会向前跳两个字节并重试。这行得通,但对我来说确实感觉很笨拙。

这是预期的行为吗?我正在使用的经纪人有问题吗?对我的规范有一些误解?

4

1 回答 1

0

从你说的情况来看,肯定是不对的。这不是预期的行为,也不是对规范的误解。QoS 0 消息中不应该有消息 ID。

你用的是什么经纪人?您能否在 test.mosquitto.org:1883 上针对代理尝试您的代码,看看它的行为是否相同?同样,如果现有客户端(例如http://mosquitto.org/download/中的 mosquitto_sub )有问题,那么问题就不是你。

于 2012-08-07T22:56:24.883 回答