为什么MQTT确认这么慢?

Why does MQTT acknowledge so slow?

我写了一个MQTT客户端程序,运行在一台电脑上(电脑1)。 MQTT 客户端程序连接到一个QoS=1 的MQTT Broker,并定期向Broker 发布数据。我使用 Mosquito 实用程序从另一台计算机(计算机 2)订阅 Broker (Qos=1)。我发现发布给 Broker 的数据会延迟大约 3 秒交付给发布者。延迟的时间太长了。我检查了代码,发现 3 秒延迟时间来自 read_packet(),这是从 Broker 回读确认。为什么会有这么长的延迟时间?我怎样才能弄清楚? Broker(MQTT 服务器)由我的同事管理。如果 Broker 是原因,我可以请求他们提供帮助。但我需要知道可能是什么问题,以便我可以与他们核实。

我可以通过在计算机 1 上查看来自 MQTT 客户端程序的调试消息来确认从 Broker 回读确认时发生的延迟。对于 Qos = 1,客户端必须在发送(发布)数据包后回读确认.我发现发送数据包和回读确认之间有 3 秒的延迟时间。当然,我也发现 Mosquito_sub 实用程序的显示延迟。

假设近乎即时的网络通信并且没有其他奇怪的事情发生,你已经用 mosquitto_sub 重新创建了问题,那么这表明 MQTT 代理是问题的根源。

在不知道您使用的是什么代理以及负载有多大的情况下很难说更多,但您应该查看代理日志。