我的客户端连接以下参数:
我试图验证,如果代理在客户端脱机时收到消息,则消息将在代理上排队,并在再次联机时发送给客户端。
但是,我发现代理在重新连接时不会向客户端发送任何内容。
我就是这样测试的:使用上述四个参数将客户端连接到代理。订阅QoS=1断开客户端感兴趣的主题
使用另一个客户端程序和另一个客户端id,将代理发布消息连接到现在脱机客户端订阅的同一主题。等待几秒钟,现在用与以前相同的连接设置重新连接脱机客户端。
预期结果:一旦连接重新建立,客户端将接收到在脱机时发送到其主题的消息。
实际结果:客户端不接收消息。它能够接收连接后发送的任何新消息,但不能接收脱机消息。**
我已经使用Wireshark验证了发送到服务器的订阅和消息发布数据包具有QoS=1和clean会话标志在CONNECT数据包中为假。
经纪人:摩斯基托v1.4.11
MQTT Config文件:
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
发布于 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客户端--所有当前的实现要么是中断的,要么是不必要的“智能”,以至于它们阻止您测试合法的测试用例。
https://stackoverflow.com/questions/51654010
复制相似问题