This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC3135:MQTT Connect ACK 超时处理

Guru**** 2393725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/990053/cc3135-mqtt-connect-ack-timeout-handling

器件型号:CC3135

您好!  

我使用 的 BOOSTXL-CC3135 WIFI 模块通过 SPI 总线与运行 在 FreeRTOS 上的 STM32L4连接。

我可以成功运行 TI 提供的 MQTT 客户端 v1.1.0 (连接、发布、订阅... )。

因此、超时保护 是我的系统的一项硬性要求、 当我调试 MQTT 堆栈时 、我发现没有针对连接确认的超时保护、会提供一个信标、其中 portMAX_DELAY 作为等待时间。  

    /* 在    此处等待 CONNACK */
    MQTTClient_ackRxSignalWait(clientCtx->ackSyncObj);  (文件: MQTT/interface/mqttclient.c  行: 922)
如果 CONNACK 消息不是来自服务器或代理端,该怎么办?  
MQTTClient_connect() API 被永久阻止?

此致、

Ridha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我需要对其进行仔细检查、但从最初的审查来看、您似乎是对的。

    似乎只有在 ACK 被返回或断开连接时才会释放信标。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Kobi、

    非常感谢您的回复。

    是否有 MQTT 库的新版本或修复此问题的最新补丁?

    如果不是、如果我在 MQTT 堆栈上应用列出的修改、该怎么办:
    +在@ref MQTTClient_connect () API 下、只有当 blockingSend 标志设置为 true 时才会应用等待 CONNACK 消息。
    +在@ref processNotifyAckCB 下、如果出现 MQTT_CONNACK 消息、则仅当 blockingSend 标志设置 为 true 时才应用 CONNACK 信号的发布。 否则、将执行回调以通知用户应用程序

    因此、@ref MQTTClient_connect 的超时机制可由应用程序通过注册的回调函数触发。

    所列补丁是否存在任何回归?

    此致、
    Ridha

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们目前的优先级列表中没有此高电平。

    源代码可供您免费更新。

    我不确定我是否理解您的修复方法。 您是否建议添加 新标志?

    为什么不只用 SEM_timedwait 替换 SEM_wait? (+检查返回值)

    BR、

    Kobi

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它与库用于 订阅、取消订阅和发布命令的标志相同。

    但是、SEM_timedwait 将解决该问题。

    谢谢你。  

    此致、

    Ridha