(mqtt学习3)mqtt的用paho库自动重连设置

         至于怎么连接,订阅,发布的,这里就不重复说了,网上很多,详细看官方文档,

https://www.eclipse.org/paho/files/mqttdoc/MQTTAsync/html/struct_m_q_t_t_async__connect_options.html#a7902ce4d11b96d8b19582bdd1f82b630

        1,特别说明,重连这个是异步特有的,不是同步的,同步的是没有的;

        2,详细的,代码我这里也不全部粘贴了,毕竟是公司的;

        3,其实就是连接的3个参数和一个MQTTAsync_setConnected()函数。

           

    conn_opts.automaticReconnect = 1;
    conn_opts.minRetryInterval = 2; //seconds
    conn_opts.maxRetryInterval = 365*24*60*60;

 第一个参数,使能自动重连;

第二个参数,是每次重连的时间间隔;

第三个参数,是重连时间的最大限度。

  conn_opts.automaticReconnect = 1;
	conn_opts.minRetryInterval = 2; //seconds
	conn_opts.maxRetryInterval = 365*24*60*60;
    conn_opts.context = GlobalClient;
	//注意,异步连接函数的返回值为0,表示的是请求连接被接收了,onConnect被调用才是真正地连接成功
	while(1)
    {
		rc = MQTTAsync_connect(GlobalClient, &conn_opts);
        if (rc == MQTTASYNC_SUCCESS)
        {
            printf("Successfully start the request of connect.\n");
            break;
        }
        sleep(1);
        printf("Failed to start the request of connect, return error code.\n", rc);
    }
    //这个函数是只有automaticReconnect被置为真时,才用的,也就是说自动重连的时候,会用这个函数
    while(1)
    {
		rc = MQTTAsync_setConnected(GlobalClient, (VOID *)GlobalClient, onConnected);
        if (rc == MQTTASYNC_SUCCESS)
        {
            printf("Successfully setConnected.\n");
            break;
        }
        sleep(1);
        printf("Failed to setConnected, return error code %d.\n", rc);
    }
}

 onConnected函数,重新连接是需要重新订阅的,之前有人说不需要重新订阅,但是我试了,重连之后,不重新订阅是可以收到消息的。

/*******************************************************************************
函 数 名 : onConnected
功能描述 : MQTTAsync_setConnected()函数重连成功调用的函数,在这里做重连之后的订阅操作
输入参数 : VOID *context, CHAR *cause,参数是固定的
输出参数 : None
返 回 值 : None
*******************************************************************************/
VOID onConnected(VOID* context, CHAR* cause)
{
	printf("set on connected\n");
    MQTTAsync_responseOptions sub_opts = MQTTAsync_responseOptions_initializer;
    sub_opts.onSuccess = onSubscribe;
    sub_opts.onFailure = onSubscribeFailure;
    sub_opts.context = GlobalClient;

    INT32 rc;
    printf("Successful connection, then ");
 
    INT32 qoss[SUB_TOPIC_COUNT] = {SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2,     \
                                   SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2,     \
                                   SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2,     \
								   SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2, SUB_TOPIC_QOS2,     \
								   SUB_TOPIC_QOS2, SUB_TOPIC_QOS2};
	CHAR *topics[SUB_TOPIC_COUNT] = {

参考:https://github.com/eclipse/paho.mqtt.c/issues/693

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章