MQTT——入門介紹

筆者相信你們對HTTP必定不能陌生。"HTTP協議的三次握手四次揮手"相信也略有耳聞。HTTP協議的優點相信你們都明白。否則他不會這流行。然而這並不能忽略他的缺點。最大的特色就是無狀態。有沒有人作過推送的業務。這個時候用HTTP協議顯然是多麼SB的事情。筆者有見過一款手機APP。他即然是在客戶端那邊開起一個後臺線程而後每一段時間去請求一下服務器,來更新客戶端的信息。不是說不行,但是大家不以爲這樣作太傷了嗎?HTTP協議是請求/響應的模式進行的。固然這樣子很簡單,但優缺點也很明顯。也許可能這就是出現不少通訊協議——XMAP協議、MQTT協議、CoAP協議等。最近筆者由於公司任務不得不去了解一下MQTT協議。因此纔會有了這一系列的出現。html

若是讀者們在百娘上面查找MQTT的話,就會出現不少關於MQTT的介紹。下面是筆者經常使用的幾個網站。git

中文MQTT站點:https://www.gitbook.com/book/mcxiaoke/mqtt-cn/detailsgithub

英文MQTT站點:http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#connectweb

博客MQTT站點:http://www.steves-internet-guide.com/mqtt/apache

在這裏筆者建議仍是要去看英文的。中文的有一些解釋看起來蛋疼。固然也有一些中文的博客介紹的也不錯。服務器

在不少的資料中介紹MQTT協議用於低端的產品比較適合。因此經常會看到他與物聯網一塊兒出現。他是以發佈/訂閱的模式進行的。如圖下網絡

從圖上咱們能夠對MQTT有一個大概的瞭解。原來MQTT有要三種角色的存在。併發

Broker代理:不少人理解爲中間件,固然能夠這樣子認爲。他就是一箇中間件。用於處理信息併發送到相應的訂閱者。ide

發佈者:用於發佈信息到代理上面。注意:發佈者也能夠是訂閱者。工具

訂閱者:就是用於接受信息的客戶端。

事實上,在他們通訊之間,還須要用一叫「主題」的概念。主題就是用於訂閱者須要什麼信息。或是理解爲訂閱者對哪一種信息感興,而後就訂閱對應的主題,這樣子訂閱者就可以接受到相應的主題信息。這樣子相信你們對MQTT就了一個很深的概念了。

MQTT協議和HTTP協議同樣子都是基於TCP/IP網絡協議上來進行的。同時在消息的傳輸上又作了三種模式的規定——分別爲:最多一次、至少一次、只有一次。即然是通訊,那麼通訊包的設計是少不了的。通訊包是以二進字流進行的。

咱們都知道HTTP協議裏面一個請求就是有一個對應的響應回來。而MQTT也能夠這樣子講,只是這裏要換另外一種說法——一個請求就要一個肯定。這一點能夠從他相關的命令就能夠看出。如圖下。

咱們能夠看到鏈接(CONNECT),有一個鏈接肯定(CONNACK)。發佈(PUBLISH),有一個發佈肯定(PUBACK).只有最後的關閉(DISCONNECT)沒有對應的肯定。這個在協議裏面已經說明了。當客戶端發來一個關閉的請求的時候,服務端沒必要要回應一個肯定給客戶端。讀者必定覺得PINGGREQ也沒有。不要誤會!PINGRESP事實上也是一種肯定。PINGGREQ用於肯定客戶端是否是還鏈接着。(注:ACK是Acknowledgement的縮寫)

MQTT從宏觀上來看的話,能夠分爲客戶端和服務器。筆者在學習的過程試過幾個。也試着去查看他的源碼。只是惋惜筆者只是對C#、JAVA比較在行。其餘開發語言就不行了。因此筆者這裏只介紹本身看過並瞭解過的服務器。至於客戶端的話,大家能夠隨便找不少。

mosquitto:是用C/C++開發語言編寫的。聽說是目前最流行的MQTT代理。(https://mosquitto.org/)

ActiveMQ:很差意思。這個不是專門爲MQTT協議而寫的。是多個協議的。因此筆者不是很喜歡。同時有人說他是純JAVA編寫的。不要被騙了裏面仍是有SCALA語言的。(http://activemq.apache.org/)

Apollo:這是ActiveMQ的子項目。據說目前中止維護。筆者略看了一下代碼。很差意思。又不是純JAVA大部分是SCALA。(http://activemq.apache.org/apollo/index.html)

HiveMQ:是商業的MQTT。爲何筆者要提他呢?主要他有不少能夠參考的意義。(https://www.hivemq.com/mqtt/)

想要了解更多的信息能夠去網站(https://github.com/mqtt/mqtt.github.io/wiki/servers)裏面相關MQTT客戶端和服務端的開源介紹和說明。

 學習MQTT最好的方式就是代一個開源的項目。不論是客戶端仍是代理端的都要。而後一邊查看源碼一邊查看官方的協議文檔。固然也有一些工具能夠幫你略去寫客戶端的代碼。如MQTTLens就是筆者常的。他是一個GOOGLE插件。

相關文章
相關標籤/搜索