Closed MGDG closed 5 years ago
mqtt_client.c 中的 is_valid_mqtt_msg 函数
{ ESP_LOGD(TAG, "pending_id=%d, pending_msg_count = %d", client->mqtt_state.pending_msg_id, client->mqtt_state.pending_msg_count); if (client->mqtt_state.pending_msg_count == 0) { return false; } if (outbox_delete(client->outbox, msg_id, msg_type) == ESP_OK) { client->mqtt_state.pending_msg_count --; return true; } if (client->mqtt_state.pending_msg_type == msg_type && client->mqtt_state.pending_msg_id == msg_id) { client->mqtt_state.pending_msg_count --; return true; } return false; }
其中
if (client->mqtt_state.pending_msg_type == msg_type && client->mqtt_state.pending_msg_id == msg_id) { client->mqtt_state.pending_msg_count --; return true; }
应当去掉。 一条消息已经应答过(outbox_delete中被删了)的又被应答一次(发生在网速慢的情况下,消息重发收到多次应答),则会进入这条语句,导致pending_msg_count数量减少,后面需要应答的消息(在之前的消息还没被应答的情况下又发送的)可能就会因为pending_msg_count为0而无法从outbox中删除,从而不停地进行重发
mqtt_client.c 中的 is_valid_mqtt_msg 函数
其中
应当去掉。 一条消息已经应答过(outbox_delete中被删了)的又被应答一次(发生在网速慢的情况下,消息重发收到多次应答),则会进入这条语句,导致pending_msg_count数量减少,后面需要应答的消息(在之前的消息还没被应答的情况下又发送的)可能就会因为pending_msg_count为0而无法从outbox中删除,从而不停地进行重发