本文翻譯自http://www.hivemq.com/blog/mqtt-essentials-special-mqtt-over-websockets
未經(jīng)允許,不得轉(zhuǎn)載
基于WebSockets的MQTT(MQTT over WebSockets)
我們已經(jīng)學(xué)習(xí)了MQTT的基礎(chǔ)內(nèi)容,對于資源受限的設(shè)備和不可靠的網(wǎng)絡(luò)環(huán)境來說,MQTT是個理想的通信協(xié)議。同時它產(chǎn)生的流量也很小。所以對于瀏覽器,手機(jī)或其他設(shè)備來說,用MQTT來收發(fā)數(shù)據(jù)也將是一個很好的選擇。MQTT over WebSockets使這種構(gòu)想成為可能。它使得瀏覽器可以利用MQTT的所有功能來服務(wù)于下列應(yīng)用場景。
- 顯示設(shè)備或傳感器的實時信息
- 接受推送消息,例如一個警告或危險提示
- 通過遺囑和保留信息來查看設(shè)備當(dāng)前狀態(tài)
- 通過手機(jī)或網(wǎng)頁程序?qū)崿F(xiàn)即時通信
從技術(shù)角度來看這意味著什么?
每個支持WebSockets的現(xiàn)代瀏覽器都可以成為一個完美的MQTT客戶端,其可以實現(xiàn)我們之前提到的所有功能。例如心跳、遺囑、QoS和保留消息都和原生MQTT一樣工作。我們只需要一個支持MQTT over WebSockets的JavaScript庫。我們還需要一個支持MQTT over WebSockets的broker。當(dāng)然了,HiveMQ支持這些功能。
它如何工作?
WebSocket是一個支持瀏覽器和服務(wù)器雙向通信的網(wǎng)絡(luò)協(xié)議。它于2011年定型并且所有的現(xiàn)代瀏覽器都支持WebSockets。和MQTT相似,WebSockets也是基于TCP的。

當(dāng)使用術(shù)語MQTT over WebSockets時,其代表著在網(wǎng)絡(luò)傳輸時,一個MQTT消息,如CONNECT或PUBLISH消息被封裝在一個或多個WebSocket數(shù)據(jù)幀中。之所以WebSockets適用于承載MQTT,是因為其通訊是雙向的、有序的和無損的(這本質(zhì)上是由于WebSockets也基于TCP)。為了通過WebSockets和MQTT的broker通信,broker必須支持原生的WebSockets。一些人也通過web服務(wù)來橋接WebSockets和MQTT,但是我們不推薦這樣做。HiveMQ原生支持此功能,更多信息可以參見使用HiveMQ實現(xiàn)基于WebSockets的MQTT。
為什么不直接使用MQTT?
現(xiàn)在瀏覽器還不支持直接用MQTT,主要是因為瀏覽器不支持最基本的TCP連接。以后這個會通過Socket API來實現(xiàn),但目前只有極個別的瀏覽器支持此API。
開始使用
如果你想開始使用MQTT over WebSockets,這有幾個較好的資源供你參考:
- 我們有一個MQTT WebSocket客戶端,可以用來測試和調(diào)試使用。它默認(rèn)使用的是一個公用的MQTT broker平臺。此客戶端的所有功能文檔在此博客。源碼可在GitHub上查到。
- 我們還有另一個博客介紹了如何一步步建立自己的MQTT WebSockets客戶端。如果你想整合MQTT到你現(xiàn)有的web應(yīng)用,這是一個比較好的方案。
- 如果你想安裝自己的支持WebSockets的broker,請參見此處。
安全WebSockets
WebSockets支持TLS加密,HiveMQ也可以實現(xiàn)此功能,使用時候有一些需要注意的地方,我們已在用戶手冊中指明。