MQTT/TCP超时

MQTT/TCP Timeout

我写了一个简单的程序用来观察MQTT连接状态

MQTT 库选择

只做MQTT Connect,不做其他事情,比如client.loop(keep connect)、disconnect.

连接成功后,等待约22s后,TCP发送[FIN, ACK]和[RST, ACK]。

TCP是否超时? 以及如何从 Wireshark 知道 TCP 超时值和查看会话。

客户端:ESP8266 <-> MQTT 代理:Windows

代码:

    void MQTT_Setup(){
      client.setServer(MQTT_SERVER, MQTT_PORT);
      //client.setCallback(callback);
      MQTT_Connect();
    }
    
    void MQTT_Connect(){
      bool bMQTT;
      bMQTT = client.connect("ESP");
      Serial.println("MQTT Connected");
      if(bMQTT)MQTT_Disconnect();
      //MQTT_Publish();
    }
    void setup() {
    Serial.begin(BAUDRATE);
    delay(3000);
    WIFI_Setup();
    MQTT_Setup();
    }

    void loop() {
      //client.loop();
    }

Wireshark:

可以在 PubSubClient.h

的第 36 行找到 PubSubClient 的默认 MQTT Keep alive 值

默认为 15 秒,代理将等待 1.5 秒保持活动状态,如果他们没有收到来自客户端的数据包,则断开连接。

15 * 1.5 ~= 22 seconds

这就是连接被关闭的原因。 client.loop() 函数将发送所需的 ping 数据包以在需要时保持连接。