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 数据包以在需要时保持连接。
我写了一个简单的程序用来观察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 数据包以在需要时保持连接。