Mosquitto 经纪商上的 PINGREQ 和 PINGRESP 之间的间隔时间是多久?

物联网 MQTT 蚊子
2021-06-18 06:08:12

由于我的 ESP8266 客户端(PubSubClient 2.6.0)和我的 Raspberry Pi 上的 Mosquitto 代理(mosquitto 1.4.10)之间的“客户端套接字错误”,我一直在寻找看似随机且不频繁的断开连接问题。

我一直在查看各种日志文件和调试语句,试图弄清楚发生了什么。在跟踪日志文件 ( tail -f /var/log/mosquitto/mosquitto.log) 时,我注意到PINGREQPINGRESP记录对不会同时填充,即使它们的时间戳是相同的。PINGRESP直到收到下一个 PINGREQ才会出现。这是正常行为吗?

下面的屏幕截图中提供了一个示例。橙色排最先出现。15 秒后,蓝色行在日志文件中被添加到一起,即使它们没有相同的时间戳。事实上,PINGRESP时间戳与PINGREQ上述(橙色)相同(1516832931 )。

我希望PINGRESP几乎立即跟在后面PINGREQ(即。时间戳是有道理的)。鉴于我在tail. 我认为这很重要,因为我认为断开连接是由于 keepalive 违规造成的,我的 keepalive 超时为 15 秒。

在此处输入图片说明

1个回答

似乎“滞后”观察只是记录过程的副作用,而不是数据流中的真正延迟。

按照@hardillb 的建议,我在树莓派上安装了tshark通过观察 Pi (192.168.0.104) 和 ESP8266 (192.168.0.117) 之间的请求和响应数据包,我可以看到它们在几分之一秒内(即 MQTT 代理响应没有 15 秒延迟)。

鲨鱼捕捉

采取的步骤:

sudo apt-get install tshark
cd /home/pi
sudo nano espcapture.pcap
sudo chown root:root espcapture.pcap (because tshark runs as root)
sudo tshark -i wlan0 -w /home/pi/espcapture.pcap
<wait 2 min>
CTRL+C

然后我将生成的 espcapture.pcap 文件传输到我的 PC,并在 Wireshark 中打开它进行分析/过滤。