Тайм-аут MQTT / TCP - PullRequest
       112

Тайм-аут MQTT / TCP

1 голос
/ 01 августа 2020

Я написал простую программу, используемую для наблюдения за состоянием соединения MQTT.

Выбор библиотеки MQTT

Выполнять только MQTT Connect, но не выполнять другие действия, например client.l oop (продолжать соединение) 、 отключаться.

При успешном подключении и подождать примерно 22 секунды TCP отправляет [ FIN, ACK] и [RST, ACK].

Тайм-аут TCP? И как узнать значение тайм-аута TCP и просмотреть сеансы из Wireshark.

Клиент: ESP8266 <-> MQTT Broker: 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: введите описание изображения здесь

1 Ответ

1 голос
/ 01 августа 2020

Значение по умолчанию MQTT Keep alive для PubSubClient можно найти в строке 36 файла PubSubClient.h

Значение по умолчанию - 15 секунд, брокеры будут ждать 1,5 секунды, чтобы сохранить активность и если они не получили пакет от клиента, разорвать соединение.

15 * 1.5 ~= 22 seconds

Вот почему соединение закрывается. Функция client.loop() отправит необходимые пакеты ping, чтобы поддерживать соединение, если это необходимо.

...