Other Parts Discussed in Thread: CC3200SDK, CC3200
你(们)好
我需要强制从 MQTT 代理断开连接、然后在生成新密钥后重新连接。
当我在几个断开/重新连接过程后执行此操作时、我无法重新连接到代理、直到器件被重置。
MQTT 库仅初始化一次。
断开连接时会删除上下文、并在重新连接之前创建上下文。
sl_ExtLib_MqttClientConnect() 函数返回249。
Thx
Emilio
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.
您好、Emilio、
我不确定、但示例程序似乎只是调用了 Disconnect 函数、后跟上下文删除函数。
{
UART_PRINT ("\n\r 转换号的订阅错误 %d\n\r\n"、iCount+1);
UART_PRINT ("从代理断开连接\r\n);
sl_ExtLib_MqttClientDisconnect (local_con_conf[iCount].clt_ctx);
local_con_conf[iCount].is_connected = false;
//删除此连接的上下文
sl_ExtLib_MqttClientCtxDelete (local_con_conf[iCount].clt_ctx);
iConnBroker --;
中断;
}
我将尝试在我的终端上执行一些测试、以便在可能的情况下正确断开连接并删除上下文。 可能需要删除上下文才能真正断开连接、但我现在不确定。 我还查看了 SDK 的 MQTT 特定发行说明、但在初始审阅后、我看不到任何突出的内容。
最棒的
Kevin
您好、Emilio、
我想向您提供有关我的调查结果的最新信息。
从 SDK 中的 MQTT 客户端库帮助文件中、客户端库只能支持有限数量的"上下文"或单个连接。 您可能满足了库可以处理的最大上下文、并且必须先正确删除这些上下文、然后才能建立更多连接。 请阅读以下内容:
客户端库支持与一台或多台服务器同时连接多个 MQTT。 在此客户端 LIB 中、对 单个连接的引用与关联的配置参数被称为"上下文"。 因此、 客户端库支持多个"上下文"。 打算使用客户端库的应用程序必须在 与服务器建立连接之前设置或创建"上下文"。 在与服务器的连接终止后、应用程序可以选择销毁"上下文"。 客户端 LIB 只能支持有限的"上下文"集、并且可以使用编译器行 选项/标志-DCFG_CL_MQTT_CTS 来配置该数字。
帮助文件位置:C:\ti\CC3200SDK_1.3.0\cc3200-sdk\docs\netapps\mqt\lib\client
最棒的
Kevin
您好、Emilio、
我曾尝试按照之前 E2E 帖子中的建议进行操作、似乎效果非常好:
在 MQTT_CLIENT SDK 示例中、我使 SW2按钮导致 MQTT 客户端断开:
if (push_button_SW2_pressed = RecvQue.event)
{
button_if_EnableInterrupt (SW2);
//注释掉发布代码以添加强制断开连接...
UART_PRINT ("--------------) 强制断开连接--- \r\n");
UART_PRINT ("从代理断开连接\r\n);
disc_check = sl_ExtLib_MqttClientDisconnect (local_con_conf[iCount].clt_ctx);
local_con_conf[iCount].is_connected = false;
}
然后、当按下按钮时、它将强制断开连接并导致发生代理断开连接事件。 在代理断开连接语句中、我添加了 goto connect_to 代理:
否则、if (broker_sDISCONNINNINNING_= RecvQue.event)
{
// iConnBroker --;
/*从消息导出 local_con_conf 或 CLT_ctx 的值*/
contDel_check = sl_ExtLib_MqttClientCtxDelete (((connect_config*)(RecvQue.hndl)->CLT_ctx);
UART_PRINT ("正在发生上下文删除... \n\n");
button_if_EnableInterrupt (SW2);//添加以获取按钮中断以使其正常工作
转至 connect_TO_Broker;//添加到 test
if (!is_connected (g_ulStatus))(如果!is_connected (g_ulStatus)
{
UART_PRINT ("设备已从 AP 断开连接\n\r\n);
UART_PRINT ("重试连接到 AP\n\r\n);
while (!(is_connected (g_ulStatus)))||!(is_ip_acquired (g_ulStatus)))
{
OSI_SLEEP (10);
}
转至 connect_to 代理;
}
if (iConnBroker < 1)
{
//
//未连接到任何代理的设备
//
转至结束;
}
}
确保注释掉上面的 iConnBroker--;以防止应用程序结束
尽管我没有使用安全套接字 TLS 1.2进行测试、但这似乎可以重复断开/重新连接。 在我的案例中、上下文删除始终返回成功。 您能否尝试将此过程实施到您的代码中、或将您的代码引入到示例中?
希望这对您有所帮助、
Kevin