(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

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