- 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()
-
支援以二位數組的方式批量訂閱,其他Many也是一樣的,異步同MQTTClient_subscribeMany
- 函數以及結構體以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
(預設值100)。MQTTAsync_createOptions::maxBufferedMessages
- 可以調用
來傳回等待發送的消息的id,或者傳回發送過程尚未完成的消息的id。MQTTAsync_getPendingTokens
例程
- 異步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