MQTT——入門介紹

筆者相信大家對HTTP一定不能陌生喊衫。"HTTP協(xié)議的三次握手四次揮手"相信也略有耳聞跌造。HTTP協(xié)議的優(yōu)勢相信大家都明白。不然他不會(huì)這流行族购。然而這并不能忽略他的缺點(diǎn)。最大的特點(diǎn)就是無狀態(tài)陵珍。有沒有人做過推送的業(yè)務(wù)寝杖。這個(gè)時(shí)候用HTTP協(xié)議顯然是多么SB的事情。筆者有見過一款手機(jī)APP互纯。他即然是在客戶端那邊開起一個(gè)后臺(tái)線程然后每一段時(shí)間去請求一下服務(wù)器瑟幕,來更新客戶端的信息。不是說不行,可是你們不覺得這樣做太傷了嗎只盹?HTTP協(xié)議是請求/響應(yīng)的模式進(jìn)行的辣往。當(dāng)然這樣子很簡單,但優(yōu)缺點(diǎn)也很明顯殖卑。也許可能這就是出現(xiàn)很多通信協(xié)議——XMAP協(xié)議站削、MQTT協(xié)議、CoAP協(xié)議等孵稽。最近筆者因?yàn)楣救蝿?wù)不得不去了解一下MQTT協(xié)議许起。所以才會(huì)有了這一系列的出現(xiàn)。

如果讀者們在百娘上面查找MQTT的話菩鲜,就會(huì)出現(xiàn)很多關(guān)于MQTT的介紹园细。下面是筆者常用的幾個(gè)網(wǎng)站。

中文MQTT站點(diǎn):https://www.gitbook.com/book/mcxiaoke/mqtt-cn/details

英文MQTT站點(diǎn):http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#connect

博客MQTT站點(diǎn):http://www.steves-internet-guide.com/mqtt/

在這里筆者建議還是要去看英文的接校。中文的有一些解釋看起來蛋疼猛频。當(dāng)然也有一些中文的博客介紹的也不錯(cuò)。

在很多的資料中介紹MQTT協(xié)議用于低端的產(chǎn)品比較適合蛛勉。所以常常會(huì)看到他與物聯(lián)網(wǎng)一起出現(xiàn)伦乔。他是以發(fā)布/訂閱的模式進(jìn)行的。如圖下

從圖上我們可以對MQTT有一個(gè)大概的了解董习。原來MQTT有要三種角色的存在烈和。

Broker代理:很多人理解為中間件,當(dāng)然可以這樣子認(rèn)為皿淋。他就是一個(gè)中間件招刹。用于處理信息并發(fā)送到相應(yīng)的訂閱者。

發(fā)布者:用于發(fā)布信息到代理上面窝趣。注意:發(fā)布者也可以是訂閱者疯暑。

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

事實(shí)上哑舒,在他們通信之間妇拯,還需要用一叫“主題”的概念。主題就是用于訂閱者需要什么信息洗鸵≡叫猓或是理解為訂閱者對哪種信息感興,然后就訂閱對應(yīng)的主題膘滨,這樣子訂閱者就能夠接受到相應(yīng)的主題信息甘凭。這樣子相信大家對MQTT就了一個(gè)很深的概念了。

MQTT協(xié)議和HTTP協(xié)議一樣子都是基于TCP/IP網(wǎng)絡(luò)協(xié)議上來進(jìn)行的火邓。同時(shí)在消息的傳輸上又做了三種模式的規(guī)定——分別為:最多一次丹弱、至少一次德撬、只有一次。即然是通信躲胳,那么通信包的設(shè)計(jì)是少不了的蜓洪。通信包是以二進(jìn)字流進(jìn)行的。

我們都知道HTTP協(xié)議里面一個(gè)請求就是有一個(gè)對應(yīng)的響應(yīng)回來坯苹。而MQTT也可以這樣子講隆檀,只是這里要換另一種說法——一個(gè)請求就要一個(gè)確定。這一點(diǎn)可以從他相關(guān)的命令就可以看出北滥。如圖下刚操。

我們可以看到連接(CONNECT),有一個(gè)連接確定(CONNACK)再芋。發(fā)布(PUBLISH)菊霜,有一個(gè)發(fā)布確定(PUBACK).只有最后的關(guān)閉(DISCONNECT)沒有對應(yīng)的確定。這個(gè)在協(xié)議里面已經(jīng)說明了济赎。當(dāng)客戶端發(fā)來一個(gè)關(guān)閉的請求的時(shí)候鉴逞,服務(wù)端不必要回應(yīng)一個(gè)確定給客戶端。讀者一定以為PINGGREQ也沒有司训。不要誤會(huì)构捡!PINGRESP事實(shí)上也是一種確定。PINGGREQ用于確定客戶端是不是還連接著壳猜。(注:ACK是Acknowledgement的縮寫)

MQTT從宏觀上來看的話勾徽,可以分為客戶端和服務(wù)器。筆者在學(xué)習(xí)的過程試過幾個(gè)统扳。也試著去查看他的源碼喘帚。只是可惜筆者只是對C#、JAVA比較在行咒钟。其他開發(fā)語言就不行了吹由。所以筆者這里只介紹自己看過并了解過的服務(wù)器。至于客戶端的話朱嘴,你們可以隨便找很多倾鲫。

mosquitto:是用C/C++開發(fā)語言編寫的。據(jù)說是目前最流行的MQTT代理萍嬉。(https://mosquitto.org/)

ActiveMQ:不好意思乌昔。這個(gè)不是專門為MQTT協(xié)議而寫的。是多個(gè)協(xié)議的帚湘。所以筆者不是很喜歡玫荣。同時(shí)有人說他是純JAVA編寫的。不要被騙了里面還是有SCALA語言的大诸。(http://activemq.apache.org/)

Apollo:這是ActiveMQ的子項(xiàng)目捅厂。聽說目前停止維護(hù)。筆者略看了一下代碼资柔。不好意思焙贷。又不是純JAVA大部分是SCALA。(http://activemq.apache.org/apollo/index.html)

HiveMQ:是商業(yè)的MQTT贿堰。為什么筆者要提他呢辙芍?主要他有很多可以參考的意義。(https://www.hivemq.com/mqtt/)

想要了解更多的信息可以去網(wǎng)站(https://github.com/mqtt/mqtt.github.io/wiki/servers)里面相關(guān)MQTT客戶端和服務(wù)端的開源介紹和說明羹与。

學(xué)習(xí)MQTT最好的方式就是代一個(gè)開源的項(xiàng)目故硅。不管是客戶端還是代理端的都要。然后一邊查看源碼一邊查看官方的協(xié)議文檔纵搁。當(dāng)然也有一些工具可以幫你略去寫客戶端的代碼吃衅。如MQTTLens就是筆者常的。他是一個(gè)GOOGLE插件腾誉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末徘层,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子利职,更是在濱河造成了極大的恐慌趣效,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猪贪,死亡現(xiàn)場離奇詭異跷敬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)热押,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門西傀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人楞黄,你說我怎么就攤上這事池凄。” “怎么了鬼廓?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵肿仑,是天一觀的道長。 經(jīng)常有香客問我碎税,道長尤慰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任雷蹂,我火速辦了婚禮伟端,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匪煌。我一直安慰自己责蝠,他們只是感情好党巾,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霜医,像睡著了一般齿拂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肴敛,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天署海,我揣著相機(jī)與錄音,去河邊找鬼医男。 笑死砸狞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镀梭。 我是一名探鬼主播刀森,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丰辣!你這毒婦竟也來了撒强?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤笙什,失蹤者是張志新(化名)和其女友劉穎飘哨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琐凭,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芽隆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了统屈。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胚吁。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖愁憔,靈堂內(nèi)的尸體忽然破棺而出腕扶,到底是詐尸還是另有隱情,我是刑警寧澤吨掌,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布半抱,位于F島的核電站,受9級(jí)特大地震影響膜宋,放射性物質(zhì)發(fā)生泄漏窿侈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一秋茫、第九天 我趴在偏房一處隱蔽的房頂上張望史简。 院中可真熱鬧,春花似錦肛著、人聲如沸圆兵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽衙傀。三九已至抬吟,卻和暖如春萨咕,著一層夾襖步出監(jiān)牢的瞬間统抬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工危队, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留聪建,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓茫陆,卻偏偏與公主長得像金麸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子簿盅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容