亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

MQTT與SSE的對(duì)比

 

構(gòu)建實(shí)時(shí)web或移動(dòng)應(yīng)用程序比構(gòu)建標(biāo)準(zhǔn)服務(wù)更具挑戰(zhàn)性。這是因?yàn)槟x擇的將數(shù)據(jù)從服務(wù)器傳遞到客戶端的協(xié)議將對(duì)總體體驗(yàn)產(chǎn)生重大影響。

當(dāng)您需要數(shù)據(jù)從服務(wù)器快速地流向客戶機(jī)時(shí),需要一個(gè)持久連接。您可以使用長(zhǎng)輪詢(long polling)、WebSockets、服務(wù)器發(fā)送事件(SSE)或HTTP2推送來(lái)完成此操作。

今天,我們將具體看看MQTT和SSE,看看它們之間的比較。

MQTT和SSE的簡(jiǎn)要?dú)v史

MQTT,即消息隊(duì)列遙測(cè)傳輸(Message Queuing Telemetry Transport),是一種發(fā)布-訂閱(publish-subscribe)消息協(xié)議,最早出現(xiàn)于1999年。IBM的andy Stanford-Clark和eurotech的Arlen Nipper在那一年發(fā)布了該協(xié)議。

最初,它為沙漠管道段之間的連接提供支持,以便進(jìn)行主動(dòng)監(jiān)測(cè)。這是通過(guò)將管道連接與衛(wèi)星網(wǎng)絡(luò)同步來(lái)實(shí)現(xiàn)的。

這個(gè)想法是創(chuàng)建一種輕量級(jí)的機(jī)器對(duì)機(jī)器通信協(xié)議,該協(xié)議甚至可以在帶寬低,連接性無(wú)法預(yù)測(cè)的有限網(wǎng)絡(luò)上以及低功耗設(shè)備上運(yùn)行。它還合并了不同級(jí)別的服務(wù)質(zhì)量(QoS)。

從那時(shí)起,MQTT已成為類似應(yīng)用程序的公認(rèn)協(xié)議,在CPU功率有限、電池限制和不可預(yù)測(cè)的通信實(shí)例之間橋接設(shè)備之間的連接。最近,MQTT已成為物聯(lián)網(wǎng)解決方案的首選協(xié)議。

另一方面,SSE(Server-Sent Events)出現(xiàn)的時(shí)間要晚得多,在2006年。該協(xié)議基于服務(wù)器發(fā)送的DOM事件,它是Opera 9 web瀏覽器引入的。當(dāng)時(shí),它還是一項(xiàng)試驗(yàn)技術(shù),僅在發(fā)生新事件或更新時(shí)才將內(nèi)容從服務(wù)器推送到客戶機(jī)或web瀏覽器。

首先,客戶端使用EventSource接口建立連接。基于JAVAScript的API使HTTP流保持打開(kāi)狀態(tài)并接收更新,直到最終將其關(guān)閉。

這是一個(gè)新的EventSource對(duì)象的示例,該對(duì)象設(shè)置為從服務(wù)器接收事件:

它們有何不同

有兩種主要的方法來(lái)處理數(shù)據(jù)傳遞。第一個(gè)稱為客戶端請(qǐng)求,它表示瀏覽器或應(yīng)用正在從服務(wù)器請(qǐng)求數(shù)據(jù)。第二種方法稱為服務(wù)器推送,這是遠(yuǎn)程服務(wù)器主動(dòng)將數(shù)據(jù)推送到網(wǎng)站或應(yīng)用程序。本質(zhì)上,一個(gè)涉及客戶端,另一個(gè)涉及服務(wù)器。

雖然只有兩種方法可以進(jìn)行數(shù)據(jù)傳遞,但是可以通過(guò)幾種方法實(shí)現(xiàn)此過(guò)程:

1)長(zhǎng)輪詢或短輪詢(客戶端pull)

2)WebSockets(服務(wù)器推送)

3)服務(wù)器發(fā)送的事件(服務(wù)器推送)

輪詢是在客戶端完成的,當(dāng)應(yīng)用程序或網(wǎng)站定期向服務(wù)器請(qǐng)求數(shù)據(jù)時(shí)會(huì)發(fā)生輪詢。

WebSockets是客戶端和服務(wù)器之間的持久連接,主要用作通信協(xié)議。

最后,SSE(Server-Sent Events)是一種異步機(jī)制,通過(guò)活動(dòng)連接將數(shù)據(jù)推送到客戶端。當(dāng)新的數(shù)據(jù)塊或更新可用時(shí),服務(wù)器也可以發(fā)送數(shù)據(jù)。連接可能保持打開(kāi)狀態(tài),但這并不一定意味著數(shù)據(jù)正在傳輸。

僅從這些定義,您就可以看到客戶機(jī)-服務(wù)器進(jìn)程有多么不同。這也意味著它們各有優(yōu)缺點(diǎn),這使得它們?cè)谀承┣闆r下非常適合使用,而在另一些情況下就不那么實(shí)用了。

MQTT作用概述

MQTT協(xié)議依賴于類似網(wǎng)絡(luò)的系統(tǒng),包括服務(wù)器,一個(gè)或多個(gè)客戶端和代理。代理是MQTT服務(wù)器,連接的設(shè)備是客戶端。發(fā)布者和客戶端都不會(huì)處理這些工作。相反,處理能力和通信主要由代理處理。

因此,MQTT允許開(kāi)發(fā)人員建立通信通道層次結(jié)構(gòu)。從視覺(jué)上看,這就像一個(gè)樹(shù)枝。發(fā)布者或服務(wù)器首先向代理發(fā)送新數(shù)據(jù),以及傳遞控制說(shuō)明。

然后,代理會(huì)促進(jìn)另一端的客戶之間的信息交換。高級(jí)客戶端可以從發(fā)布服務(wù)器接收每一條消息或更新,而低級(jí)客戶端只接收與其基本級(jí)別相關(guān)的消息。

所有發(fā)布并發(fā)送給代理的數(shù)據(jù)(以及接收到的數(shù)據(jù))均采用二進(jìn)制協(xié)議進(jìn)行編碼。 因此,必須先解釋該消息,然后才能使用數(shù)據(jù)內(nèi)容。

盡管如此,MQTT僅通過(guò)純文本分發(fā)安全性憑證,因此它并不完全安全,并且不能為大多數(shù)應(yīng)用程序提供足夠的身份驗(yàn)證或安全性。開(kāi)發(fā)人員可以通過(guò)實(shí)現(xiàn)SSL框架解決此問(wèn)題,該框架通過(guò)加密保護(hù)任何傳輸?shù)臄?shù)據(jù)。

MQTT:優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn)

1)MQTT是一種難以置信的輕量級(jí)協(xié)議,旨在連接資源最受限的設(shè)備。

2)它內(nèi)置了多層服務(wù)質(zhì)量(QoS)。

3)大多數(shù)云OT廠商和提供商已經(jīng)支持MQTT,使其成為傳感器不斷收集和報(bào)告聚合數(shù)據(jù)的IoT解決方案的理想選擇。

4)MQTT是雙向的。

缺點(diǎn)

1)由于集中代理的性質(zhì),開(kāi)發(fā)人員在使用MQTT時(shí)可能會(huì)遇到擴(kuò)展限制,本地代理中心會(huì)限制其支持的擴(kuò)展量。

2)具有諷刺意味的是,MQTT通常運(yùn)行在TCP/IP網(wǎng)絡(luò)堆棧的頂部,該堆棧是為具有更大內(nèi)存和處理能力的設(shè)備而設(shè)計(jì)的。因此,喚醒和通訊時(shí)間可能會(huì)延長(zhǎng),這可能會(huì)影響長(zhǎng)期的電池消耗。

SSE概述

SSE連接通常在客戶端-服務(wù)器配置之間的鏈接的客戶端開(kāi)始。客戶端通過(guò)在JavaScript中創(chuàng)建新的EventSource對(duì)象來(lái)啟動(dòng)并打開(kāi)連接。它通過(guò)HTTP請(qǐng)求發(fā)送相關(guān)的URL。

建立連接后,客戶端將期待并尋找事件消息流。只要傳輸數(shù)據(jù),HTTP請(qǐng)求就保持打開(kāi)狀態(tài)。一段時(shí)間后,當(dāng)客戶端認(rèn)為傳輸過(guò)時(shí)時(shí),連接將關(guān)閉。如果取消了初始請(qǐng)求,則客戶端也可以直接關(guān)閉連接。

如您所見(jiàn),SSE比MQTT更簡(jiǎn)單,并且不涉及代理。

SSE:優(yōu)點(diǎn)和缺點(diǎn)

優(yōu)點(diǎn)

1)數(shù)據(jù)通過(guò)簡(jiǎn)單且廣泛使用的HTTP協(xié)議而不是專有協(xié)議進(jìn)行同步。

2)包括對(duì)重新建立連接和事件ID功能的內(nèi)置支持。

3)對(duì)于利用單向通信的應(yīng)用程序和服務(wù)非常有用。

缺點(diǎn)

1)不幸的是,SSE只支持UTF-8編碼,不支持二進(jìn)制數(shù)據(jù)。

2)對(duì)最大打開(kāi)連接數(shù)的嚴(yán)格限制可能使事情變得困難,每個(gè)瀏覽器都設(shè)置了限制。

3)SSE是單向的。

MQTT與SSE

比較MQTT和SSE時(shí)要考慮的最重要的事情是它們的連接能力。例如,SSE是單向的,專門為需要從服務(wù)器提取信息的服務(wù)或應(yīng)用程序而設(shè)計(jì)。另一方面,MQTT是一種健壯的雙向通信選項(xiàng),可以促進(jìn)服務(wù)器與客戶端之間來(lái)回的數(shù)據(jù)傳輸。

這意味著SSE非常適合將信息存儲(chǔ)在服務(wù)器上并推送到客戶端的應(yīng)用程序,例如實(shí)時(shí)股票應(yīng)用程序或基于新聞的服務(wù)。從本質(zhì)上講,不需要從客戶端以相反的方向傳遞數(shù)據(jù)。

這也解釋了為什么開(kāi)發(fā)人員在物聯(lián)網(wǎng)應(yīng)用程序,傳感器和設(shè)備中首選MQTT的原因,當(dāng)然還有其他優(yōu)點(diǎn)。由于信息具有雙向結(jié)構(gòu),因此可以雙向傳遞。

SSE開(kāi)源解決方案

了解SSE之后,您可能已經(jīng)準(zhǔn)備好尋找可以幫助您入門的開(kāi)源SSE軟件。Gossed就是一個(gè)例子。它允許您將任何程序的標(biāo)準(zhǔn)輸出作為服務(wù)器發(fā)送的事件推送到瀏覽器。

還有SSE Channel,可以將消息廣播到所有連接的客戶端。另外,此工具會(huì)自動(dòng)維護(hù)歷史記錄。它的另一個(gè)功能是能夠根據(jù)需要向客戶端發(fā)送自動(dòng)“保持活動(dòng)(keep-alive)”數(shù)據(jù)包的功能。

MQTT開(kāi)源解決方案

也有開(kāi)放源碼MQTT選項(xiàng)。Eclipse Mosquitto是輕量級(jí)的,適用于所有設(shè)備。它可以處理從智能手機(jī)到連接傳感器的各種設(shè)備的消息傳遞需求。還有一個(gè)測(cè)試服務(wù)器,它允許您使用幾個(gè)與MQTT相關(guān)的場(chǎng)景查看客戶機(jī)的功能。

HiveMQ是MQTT的另一個(gè)代理,它在2019年4月成為一種開(kāi)源軟件。它專門用于處理與物聯(lián)網(wǎng)設(shè)備相關(guān)的信息。該工具提供了一個(gè)實(shí)時(shí)監(jiān)視界面,以及用于故障診斷的高級(jí)端到端MQTT分析。

實(shí)施中的困難

首先,為MQTT或SSE實(shí)現(xiàn)內(nèi)部解決方案可能聽(tīng)起來(lái)可行。但是,有一些常見(jiàn)的問(wèn)題需要克服,比如與消息順序和有保障的傳遞相關(guān)的問(wèn)題。您還必須牢記安全性,包括訪問(wèn)控制和配置。2019年,安全研究人員詳細(xì)描述了至少3200個(gè)擁有智能家居技術(shù)的家庭是如何由于MQTT的不安全錯(cuò)誤配置而可能受到黑客攻擊的。

再加上其他必需的東西,比如創(chuàng)建開(kāi)發(fā)人員文檔,就很容易理解為什么您最終會(huì)認(rèn)為,從操作和工程的角度來(lái)看,使用內(nèi)部解決方案過(guò)于耗費(fèi)人力和成本。隨著最終用戶數(shù)量的增長(zhǎng),你很可能會(huì)得出這樣的結(jié)論。在加大努力的同時(shí),這里列出的所有挑戰(zhàn)可能會(huì)變得更成問(wèn)題。

盡管如前所述,MQTT和SSE都具有開(kāi)源選項(xiàng),但更明智的選擇是投資于商用的實(shí)時(shí)消息傳遞平臺(tái)。 即使您擴(kuò)大規(guī)模,它也可以幫助您始終獲得較高的性能和可靠性。

分享到:
標(biāo)簽:MQTT
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定