首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MQTT:不接收脱机消息

MQTT:不接收脱机消息
EN

Stack Overflow用户
提问于 2018-08-02 12:44:45
回答 1查看 1.5K关注 0票数 0

我的客户端连接以下参数:

  1. 清洁会话:假
  2. 客户ID:固定(每次相同)
  3. 订阅QoS=1
  4. 与QoS=1一起发布的消息

我试图验证,如果代理在客户端脱机时收到消息,则消息将在代理上排队,并在再次联机时发送给客户端。

但是,我发现代理在重新连接时不会向客户端发送任何内容。

我就是这样测试的:使用上述四个参数将客户端连接到代理。订阅QoS=1断开客户端感兴趣的主题

使用另一个客户端程序和另一个客户端id,将代理发布消息连接到现在脱机客户端订阅的同一主题。等待几秒钟,现在用与以前相同的连接设置重新连接脱机客户端。

预期结果:一旦连接重新建立,客户端将接收到在脱机时发送到其主题的消息。

实际结果:客户端不接收消息。它能够接收连接后发送的任何新消息,但不能接收脱机消息。**

我已经使用Wireshark验证了发送到服务器的订阅和消息发布数据包具有QoS=1和clean会话标志在CONNECT数据包中为假。

经纪人:摩斯基托v1.4.11

MQTT Config文件:

代码语言:javascript
运行
复制
pid_file /var/run/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

log_dest file /var/log/mosquitto/mosquitto.log
log_type debug

listener 9001
protocol websockets

listener 1883
protocol mqtt

allow_anonymous false
acl_file /path/to/acl_file
password_file /path/to/password_file
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-02 20:54:35

这是一个行为不当的GUI客户端的案例。其中三个!

我张贴它,以便其他人不会浪费时间在类似的事情。

我试过三个客户,他们都有不同的问题,如下所述:

MQTT.fx :代理在连接之后确实会立即传递消息,但主题尚未在当前会话中订阅,因此MQTT.fx没有任何指定的位置来显示接收到的消息。因此,它不会在屏幕上显示消息。MQTT.fx还通过订阅$SYS日志主题使Wireshark的调试变得更加复杂,这个主题淹没了Wireshark,来自代理的主要消息在大量数据包中丢失。

MQTT Spy:与MQTT.fx不同,它有一个catch选项卡,因此如果代理发送在当前会话中未被订阅的消息,它将在catch all选项卡中显示它。不幸的是,MQTT Spy的实现者已经决定,在断开连接之前,他们的应用程序将取消订阅所有主题。由于客户端不再订阅主题,borker不会为其排队任何消息。

MQTT镜头:它有一个bug。它不保存清洁会话的连接设置。即使您将connection设置为false,它也总是使用clean session=true打开连接。

最后,我用Paho Java库编写了一个测试程序,并发现一切都如预期的那样工作。

我想知道为什么没有用于MQTT的引用实现GUI客户端--所有当前的实现要么是中断的,要么是不必要的“智能”,以至于它们阻止您测试合法的测试用例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51654010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档