mqttclient跨平臺(tái) MQTT 客戶端
一個(gè)高性能、高穩(wěn)定性的跨平臺(tái) MQTT 客戶端,基于 socket API 開發(fā),可以在嵌入式設(shè)備(FreeRTOS/LiteOS/RT-Thread/TencentOS tiny)、Linux、Windows、Mac 上使用,擁有非常簡潔的 API 接口,以極少的資源實(shí)現(xiàn) QOS2 的服務(wù)質(zhì)量,并且無縫銜接了 mbedtls 加密庫。
優(yōu)勢:
-
基于標(biāo)準(zhǔn)BSD socket之上開發(fā),只要是兼容BSD socket的系統(tǒng)均可使用。
-
穩(wěn)定:無論是
掉線重連,丟包重發(fā),都是嚴(yán)格遵循MQTT協(xié)議標(biāo)準(zhǔn)執(zhí)行,除此之外對(duì)大數(shù)據(jù)量的測試無論是收是發(fā),都是非常穩(wěn)定(一次發(fā)送135K數(shù)據(jù),3秒一次),高頻測試也是非常穩(wěn)定(7個(gè)主題同時(shí)收發(fā),每秒一次,也就是1秒14個(gè)mqtt報(bào)文,服務(wù)質(zhì)量QoS0、QoS1、QoS2都有)。因?yàn)樽髡咭詷O少的資源設(shè)計(jì)了記錄機(jī)制,對(duì)采用QoS1服務(wù)質(zhì)量的報(bào)文必須保證到達(dá)一次,當(dāng)發(fā)布的主題(qos1、qos2都適用)沒有被服務(wù)器收到時(shí)會(huì)自動(dòng)重發(fā),而對(duì)QoS2服務(wù)質(zhì)量的報(bào)文保證有且只有處理一次(如果不相信它穩(wěn)定性的同學(xué)可以自己去修改源碼,專門為QoS2服務(wù)質(zhì)量去做測試,故意不回復(fù)PUBREC包,讓服務(wù)器重發(fā)QoS2報(bào)文,且看看客戶端是否有且只有處理一次),而對(duì)于掉線重連的穩(wěn)定性,這種則是基本操作了,沒啥好說的,在自動(dòng)重連后還會(huì)自動(dòng)重新訂閱主題,保證主題不會(huì)丟失,因此在測試中穩(wěn)定性極好。 -
輕量級(jí):整個(gè)代碼工程極其簡單,不使用mbedtls情況下,占用資源極少,作者曾使用esp8266模組與云端通信,整個(gè)工程代碼消耗的RAM不足15k(包括系統(tǒng)占用的開銷,對(duì)數(shù)據(jù)的處理開銷,而此次還是未優(yōu)化的情況下,還依舊完美保留了掉線重連的穩(wěn)定性,但是對(duì)應(yīng)qos1、qos2服務(wù)質(zhì)量的報(bào)文則未做測試,因?yàn)镾TM32F103C8T6芯片資源實(shí)在是太少了,折騰不起)。
-
無縫銜接mbedtls加密傳輸,讓網(wǎng)絡(luò)傳輸更加安全,而且接口層完全不需要用戶理會(huì),無論是否加密,mqttclient對(duì)用戶提供的API接口是沒有變化的,這就很好的兼容了一套代應(yīng)用層的碼可以加密傳輸也可以不加密傳輸。
-
擁有極簡的API接口,總的來說,mqttclient的配置都有默認(rèn)值,基本無需配置都能使用的,也可以隨意配置,對(duì)配置都有健壯性檢測,這樣子設(shè)計(jì)的API接口也是非常簡單。
-
有非常好的代碼風(fēng)格與思想:整個(gè)代碼采用分層式設(shè)計(jì),代碼實(shí)現(xiàn)采用異步處理的思想,降低耦合,提高性能,具體體現(xiàn)在什么地方呢?很簡單,目前市面上很多MQTT客戶端發(fā)布主題都是要阻塞等待ack,這是非常暴力的行為,阻塞當(dāng)前線程等待服務(wù)器的應(yīng)答,那如果我想要發(fā)送數(shù)據(jù)怎么辦,或者我要重復(fù)檢測數(shù)據(jù)怎么辦,你可能會(huì)說,指定阻塞時(shí)間等待,那如果網(wǎng)絡(luò)延遲,ack遲遲不來,我就白等了嗎,對(duì)于qos1、qos2的服務(wù)質(zhì)量怎么辦,所以說這種還是要異步處理的思想,我發(fā)布主題,那我發(fā)布出去就好了,不需要等待,對(duì)于qos1、qos2服務(wù)質(zhì)量的MQTT報(bào)文,如果服務(wù)器沒收到,那我重發(fā)就可以,這種重發(fā)也是異步的處理,完全不會(huì)阻塞當(dāng)前線程。
-
MQTT協(xié)議支持主題通配符
“#”、“+”。 -
訂閱的主題與消息處理完全分離,讓編程邏輯更加簡單易用,用戶無需理會(huì)錯(cuò)綜復(fù)雜的邏輯關(guān)系。
-
mqttclient內(nèi)部已實(shí)現(xiàn)?;钐幚頇C(jī)制,無需用戶過多關(guān)心理會(huì),用戶只需專心處理應(yīng)用功能即可。
-
無縫銜接salof:它是一個(gè)同步異步日志輸出框架,在空閑時(shí)候輸出對(duì)應(yīng)的日志信息,也可以將信息寫入flash中保存,方便調(diào)試。
-
不對(duì)外產(chǎn)生依賴。
-
使用 paho mqtt 庫
整體框架
擁有非常明確的分層框架。
目前已實(shí)現(xiàn)了Linux、TencentOS tiny、FreeRTOS、RT-Thread平臺(tái)(已做成軟件包,名字為kawaii-mqtt),除此之外TencentOS tiny的AT框架亦可以使用(RAM消耗不足15K),并且穩(wěn)定性極好!
| 平臺(tái) | 代碼位置 |
|---|---|
| Linux | https://github.com/jiejieTop/mqttclient |
| TencentOS tiny | https://github.com/Tencent/TencentOS-tiny/tree/master/board/Fire_STM32F429 |
| TencentOS tiny AT 框架 | https://github.com/jiejieTop/gokit3-board-mqttclient |
| RT-Thread | https://github.com/jiejieTop/kawaii-mqtt |
| FreeRTOS | https://github.com/jiejieTop/freertos-mqttclient |
