天天看點

MQTT與paho.mqttMQTT協定庫(paho.mqtt.c)

  • MQTT協定
  • 庫(paho.mqtt.c)
    • 同步模式
      • 特性接口
      • 例程
    • 異步模式
      • 自動重連設定
      • 持久性釋出設定
      • 例程
    • SSL支援
    • 日志設定
    • 資料

MQTT協定

  • 采用釋出/訂閱消息模式
  • 使用TCP/IP提供網絡連接配接
  • 三種消息釋出服務品質QoS,消息推送的原則,伺服器維護難度遞增
    • 至多一次
    • 至少一次
    • 隻有一次
  • 主題的分割符與通配符
    • 分割符"/":為友善主題管理與擴充,mqtt的主題是有路徑的,以"/"分割
    • 通配符"#":表示層次結構的完整子樹,比如SENSOR/#,是以"#"隻能為最後一個字元
    • 通配符"+":辨別層次結構的單個級别,用于分隔符之間,比如SENSOR/+/TEMP

庫(paho.mqtt.c)

根據推薦找到paho項目的mqtt的c庫與cpp庫,因為接口較為簡單,且cpp庫建立在c庫上,是以直接使用c庫paho.mqtt.c。

paho.mqtt.c 提供了兩種模式——同步模式和異步模式。

同步模式

單線程,線程不安全,接收需要循環周遊,特點是簡單

特性接口

  • 服務品質為"至少一次"和"恰好一次",publish時由于可能涉及重發必須調用

    MQTTClient_waitForCompletion()

  • 接收通知,需要循環調用

    MQTTClient_receive()

    或者

    MQTTClient_yield()

    以判斷是否有資料通知
  • MQTTClient_subscribeMany

    支援以二位數組的方式批量訂閱,其他Many也是一樣的,異步同
  • 函數以及結構體以5結尾的表示是MQTT V5的接口與資料類型,異步同

例程

同步publish:https://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/pubsync.html

異步模式

多線程,線程安全,所有消息都以回調形式傳回,特點非阻塞,适用于界面程式設計,且功能齊全

自動重連設定

  • 開啟條件:

    MQTTAsync_connectOptions::automaticReconnect

    設定為非零,
  • 重連時間間隔:從最小重連時間間隔(預設為1s)開始,每失敗一次,時間翻倍,直到重連時間大于最大重連時間間隔(預設為60s),可以通過

    MQTTAsync_connectOptions::minRetryInterval

    MQTTAsync_connectOptions::maxRetryInterval

    進行設定。
  • 重連成功會回調

    MQTTAsync_connected

持久性釋出設定

解釋:publish不成功,一直釋出,直到斷開連接配接
  • 開啟條件:使用

    MQTTAsync_createWithOptions

    而不是

    MQTTAsync_create

    來建立用戶端對象。将

    MQTTAsync_createOptions::sendWhileDisconnected

    設定為非零,并設定

    MQTTAsync_createOptions::maxBufferedMessages

    (預設值100)。
  • 可以調用

    MQTTAsync_getPendingTokens

    來傳回等待發送的消息的id,或者傳回發送過程尚未完成的消息的id。

例程

  • 異步publish:https://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/pubasync.html
  • 異步subscribe:https://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/subasync.html

SSL支援

  • 開關:

    struct MQTTClient_init_options::do_openssl_init

  • 配置:

    struct MQTTClient_connectOptions::ssl

日志設定

  • 日志檔案輸出開關(MQTT_C_CLIENT_TRACE):存儲的檔案名,ON/stdout輸出到标準輸出
  • 日志級别設定(MQTT_C_CLIENT_TRACE): 7個級别,FATAL 、SEVERE、ERROR, PROTOCOL, MINIMUM, MEDIUM,MAXIMUM
  • 例子:
    MQTT_C_CLIENT_TRACE=ON
    MQTT_C_CLIENT_TRACE_LEVEL=PROTOCOL
               
  • 接口
    //同步模式
    typedef void MQTTClient_traceCallback(enum MQTTCLIENT_TRACE_LEVELS level, char *message)
    void 	MQTTClient_setTraceLevel (enum MQTTCLIENT_TRACE_LEVELS level);
    void 	MQTTClient_setTraceCallback (MQTTClient_traceCallback *callback);
    //異步模式
    typedef void MQTTAsync_traceCallback(enum MQTTASYNC_TRACE_LEVELS level, char *message)
    void 	MQTTAsync_setTraceLevel (enum MQTTASYNC_TRACE_LEVELS level)
    void 	MQTTAsync_setTraceCallback (MQTTAsync_traceCallback *callback)
               

資料

  • 源碼:https://github.com/eclipse/paho.mqtt.c
  • 文檔:https://www.eclipse.org/paho/files/mqttdoc/MQTTClient/html/index.html
  • 首頁:https://www.eclipse.org/paho/index.php?page=clients/c/index.php

繼續閱讀