天天看點

(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
功能描述 : 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] = {      

繼續閱讀