问题描述
我编写了一个MQTT客户端程序,该程序在计算机(计算机1)上运行。 MQTT客户端程序以QoS = 1连接到MQTT代理,并定期将数据发布到代理。我使用Mosquito实用程序从另一台计算机(计算机2)订阅了broker(Qos = 1)。我发现发布到broker的数据将延迟大约3秒钟交付给发布者。延迟的时间太长。我检查了代码,发现3秒钟的延迟时间来自read_packet(),它是从broker中回读确认的。为什么会有这么长的延迟时间?我该如何解决?经纪人(MQTT服务器)由我的同事管理。如果是中间人,我可以要求他们提供帮助。但是我需要知道什么可能是麻烦源,以便与他们进行核对。
我可以通过在计算机1上查看来自MQTT客户端程序的调试消息来确认从broker回读确认时发生的延迟。对于Qos = 1,客户端必须在发送(发布)数据包后回读确认。我发现在发送数据包和回读确认之间有3秒的延迟时间。当然,我还发现了Mosquito_sub实用程序的显示延迟。
解决方法
假设您附近的网络通讯很频繁,并且事实证明您已经用mosquitto_sub
重新创建了问题,那么这表明MQTT代理是问题的根源。
在不知道您正在使用什么代理以及加载了多少代理的情况下,很难说更多,但是您应该查看代理日志。