I概括一,MQTT協(xié)議 1、MQTT協(xié)議可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實時可靠的消息服務(wù)。 2、使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合。 3、實現(xiàn)MQTT協(xié)議需要客戶端和服務(wù)器端通訊完成,在通訊過程中,MQTT協(xié)議中有三種身份:發(fā)布者(Publish)、代理(Broker)(服務(wù)器)、訂閱者(Subscribe)。其中,消息的發(fā)布者和訂閱者都是客戶端,消息代理是服務(wù)器,消息發(fā)布者可以同時是訂閱者。 4、MQTT傳輸?shù)南⒎譃椋褐黝}(Topic)和負(fù)載(payload)兩部分: II詳解一、MQTT是什么?MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協(xié)議),是一種基于發(fā)布/訂閱(Publish/Subscribe)模式的輕量級通訊協(xié)議,該協(xié)議構(gòu)建于TCP/IP協(xié)議上,由IBM在1999年發(fā)布,目前最新版本為v3.1.1。MQTT最大的優(yōu)點在于可以以極少的代碼和有限的帶寬,為遠(yuǎn)程設(shè)備提供實時可靠的消息服務(wù)。做為一種低開銷、低帶寬占用的即時通訊協(xié)議,MQTT在物聯(lián)網(wǎng)、小型設(shè)備、移動應(yīng)用等方面有廣泛的應(yīng)用。 當(dāng)然,在物聯(lián)網(wǎng)開發(fā)中,MQTT不是唯一的選擇,與MQTT互相競爭的協(xié)議有XMPP和CoAP協(xié)議等, 應(yīng)用消息 Application Message MQTT協(xié)議通過網(wǎng)絡(luò)傳輸應(yīng)用數(shù)據(jù)。應(yīng)用消息通過MQTT傳輸時,它們有關(guān)聯(lián)的服務(wù)質(zhì)量(QoS)和主題(Topic)。 客戶端Client 服務(wù)端 Server 訂閱 Subscription 主題名 Topic 主題過濾器 Topic Filter 會話 Session 控制報文 MQTT Control Packet ASCII:0~31及127(共33個)是控制字符或通信專用字符(其余為可顯示字符32~126(共95個)是字符(32是空格),其中48~57為0到9十個阿拉伯?dāng)?shù)字。65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其余為一些標(biāo)點符號、運算符號等。 GBK:漢字內(nèi)碼擴(kuò)展規(guī)范(國標(biāo))。 采用單/雙字節(jié)變長編碼,完全兼容AsCH字符編碼英文使用單字節(jié)編碼,中文部分采用雙字節(jié)編碼。 UTF-8:是一種針對 Un i code的可變長度字符編碼,又稱萬國碼。 UTF-8用1到6個字節(jié)編碼 Uni code字符。 可以表示中文簡體繁體及其它語言(如英文,日文,韓文)。 注意:即使是同一個漢字,在不同的編碼中所對應(yīng)的數(shù)值/長度是不同的(如:GBK/UTF-8安信可IDE默認(rèn)是GBK編碼,MTT規(guī)定為UTF-8編碼。 如果使用安信可編譯器編程發(fā)送漢字,需將安信可IDE的編碼方式設(shè)為UTF-8。 清理會話 Clean Session 二、MQTT的特點消息質(zhì)量(QoS) MQTT消息質(zhì)量有三個等級,QoS 0,QoS 1和 QoS 2。 QoS 0:最多分發(fā)一次。消息的傳遞完全依賴底層的TCP/IP網(wǎng)絡(luò),協(xié)議里沒有定義應(yīng)答和重試,消息要么只會到達(dá)服務(wù)端一次,要么根本沒有到達(dá)。 eg. MQTT的消息類型(Message Type) 固定報文頭中的第一個字節(jié)包含連接標(biāo)志(Connect Flags),連接標(biāo)志用來區(qū)分MQTT的消息類型。MQTT協(xié)議擁有14種不同的消息類型(如表2),可簡單分為連接及終止、發(fā)布和訂閱、QoS 2消息的機(jī)制以及各種確認(rèn)ACK。至于每一個消息類型會攜帶什么內(nèi)容。
發(fā)布/訂閱模式解耦了發(fā)布消息的客戶(發(fā)布者)與訂閱消息的客戶(訂閱者)之間的關(guān)系,這意味著發(fā)布者和訂閱者之間并不需要直接建立聯(lián)系。
JSON JSON中文全稱是JavaScript對象標(biāo)記語言,在這門語言中,一切都是對象。因此,任何支持的類型都可以通過JSON來表示,例如字符串、數(shù)字、對象、數(shù)組等。其語法規(guī)則是: 對象表示為鍵值對; 數(shù)據(jù)由逗號分隔; 花括號保存對象; 方括號保存數(shù)組。 JSON層次結(jié)構(gòu)簡潔清晰,易于閱讀和編寫,同時也易于機(jī)器解析和生成,有效提升網(wǎng)絡(luò)傳輸效率。 對于單片機(jī)開發(fā)者,主流的微控制器軟件開發(fā)工具Keil有提供JSON庫,可以用于STC、STM32等微控制器開發(fā),所以在微控制器上解析JSON不需要自己寫一個JSON解析器或者移植了。 如果實在懶得使用JSON庫生成或解析,也可以直接使用C語言中的sprintf生成JSON字符串,比如: sprintf(buf, '{\'String\':\'%s\', \'Value\':%d}', 'Hello World!', 12345);
|
|
|