為什麼用MQTT不用TCP長連線透傳

2021-10-07 16:30:15 字數 1443 閱讀 3172

mqtt是標準的rfc協議,相比於私有協議而言更加標準。好處在於:

(1)協議非常完整,能夠馬上用於生產。各端實現同一套協議之後,就能進行通訊;私有協議還需要進行大量的驗證,看有無缺陷或欠考慮的地方等。

(2)協議的標準化帶來大量的開源元件,降低開發難度。隨著物聯網+5g生態越來越好,開源元件越來越多,可以減少重複編碼量。

(3)標準協議利於第三方接入。當第三方裝置、平台想要對接的時候,拿出一套標準的mqtt協議拍在他們臉上,再也沒人有理由要求改介面了。

當然tcp自己開發協議也能做到,但mqtt都已經把功能做好了,自己開發協議反而增加難度。有利的功能包括:

(1)心跳機制。不需要自己做業務協議層的心跳了。

(2)遺囑訊息。這對於經常掉線的物聯網裝置而言非常有用。

(3)qos質量等級+離線訊息。持久會話離線的訊息也能接收到,對於網路不穩定但要求必須送達的物聯網場景很有用。

(4)非同步機制。mqtt將訊息以qos1/2傳送出去後,裝置端就不需要再管了,一切由雲端負責失敗重傳。

(5)訂閱發布機制。一次發布,多個客戶端訂閱,這對於m2m場景很省電、省流量。

(6)主題和安全。可以用主題來方便地控制客戶端許可權。

以上的功能基於tcp自己開發也能做到,如果自己都開發了,不就是實現了應用層的mqtt協議了嗎

iot目前主流設計有兩部分:

(1)裝置影子價值

(2)規則引擎價值

這些都是tcp透傳這種雲不理解業務資料內容做不到的(不要說tcp也可以解包然後分析業務資料然後**,這樣不就是變相地實現了mqtt了嗎)。

這需要看具體的業務場景。

mqtt之所以叫做「訊息佇列遙測傳輸」協議,就是因為最開始是用來將無人看管的石油天然氣管道資料通過衛星鏈路上報給資料中心,當時的需求在於:

(1)石油天然氣管道大多處於無人區,更不可能有基站了,只能通過偶爾覆蓋的衛星來通訊。衛星通訊極其不穩定,很容易頻繁斷開連線。

(2)資料採集頻率不高,且資料量小。

(3)有的訊息很重要,需要有質量保證,比如石油洩漏,即使想傳送的時候斷網了,也應該在斷網後能夠傳出去,且傳出去必須要保證送達。

(4)採集裝置都是嵌入式裝置,要求低功耗。

這不就是mqtt的「會話機制」、「非同步機制」、「qos機制」等功能的體現嗎。

其實採用tcp透傳和mqtt都可以,如果mqtt只訂閱乙個主題,只發布乙個主題,payload填業務資料,不就退化成tcp長連線透傳了嗎。有的可能已經有私有協議了,如果想要把iot做大,可以考慮mqtt協議;如果想減少成本盡快上線,用tcp透傳也可以。

當別人問為什麼要用mqtt不用tcp長連線透傳的時候,要先體會mqtt的好處,然後結合自己的業務分析是否真的有必要上mqtt(畢竟mqtt整套下來成本比tcp高不少)。當然還有其他協議,比如室外的智慧型路燈由於只能通過基站上網,因此可以用插sim卡的coap協議;一些總是插電的資源很多的裝置如路由器,甚至可以用http協議。在糾結mqtt協議的時候,這些都是可以考慮的方向。

為什麼用VUE,而不用Jquery了?

在沒有任何前端框架之前,我們寫 只能用原生的js,進行資料的處理,dom的操作,譬如對乙個id 為txtname 的文字框進行賦值,我們是這樣的 document.getelementbyid txtname value 張三 當然這還僅僅是針對通過id獲取dom 現實開發中還有其它的各種操作,當然...

python為什麼用flask 為什麼用flask

flask是python在web開發領域乙個輕量級的框架,為什麼選擇flask呢?此文可能會給你答案。選擇flask的原因 1.微框架 簡潔 只做它需要做的,給開發展提供了很大的擴充套件性。2.flask和相關的依賴 jinja2 werkzeug 設計得非常優秀,用著簡單。3.開發效率非常高,比如...

我為什麼用Android 手機而不用 iPhone

最重要的因素肯定是 android大部分的市場份額還是千元幾或者兩千多的機子撐起來的。像我這種學生階段的iphone的 實在太高。android這麼低的入門門檻決定了它的市場份額肯定會很好看。android系統的開源使得玩機的空間很大,熱門機型隨意一搜連rom都能有上千個。有個笑話說android使...