物聯(lián)網(wǎng)架構(gòu)
1、物聯(lián)網(wǎng)的作用
實(shí)現(xiàn)物聯(lián)網(wǎng)時(shí),物聯(lián)網(wǎng)服務(wù)大體上發(fā)揮著兩個(gè)作用。
第一是把從設(shè)備收到的數(shù)據(jù)保存到數(shù)據(jù)庫,并對采集的數(shù)據(jù)進(jìn)行分析。
第二是向設(shè)備發(fā)送指令和信息。本章將會(huì)為大家介紹如何構(gòu)建物聯(lián)網(wǎng)服務(wù),以及用于實(shí)現(xiàn)物聯(lián)網(wǎng)的重要要素。
2、整體結(jié)構(gòu)
物聯(lián)網(wǎng)大體上有3 個(gè)構(gòu)成要素,如圖2.1 所示。一個(gè)是設(shè)備,另一個(gè)是網(wǎng)關(guān),再來就是服務(wù)器。
網(wǎng)關(guān)指的是能連接多臺(tái)設(shè)備,并具備直接連接到互聯(lián)網(wǎng)的功能的機(jī)器和軟件(圖2.2)。如今,市面上有很多種網(wǎng)關(guān)。在多數(shù)情況下,網(wǎng)關(guān)憑借Linux 操作系統(tǒng)來運(yùn)行。
選擇網(wǎng)關(guān)時(shí)有幾項(xiàng)重要的標(biāo)準(zhǔn),我們來一起看一下。
接口
第一重要的是用于連接網(wǎng)關(guān)和設(shè)備的接口。網(wǎng)關(guān)的接口決定了能連接的設(shè)備,因此重點(diǎn)在于選擇一個(gè)適配設(shè)備的接口。
有線連接方式包括串行通信和USB 連接。串行通信中經(jīng)常用的是一種叫作D-SUB 9 針(pin)的連接器,而USB 連接中用到的USB 連接器則種類繁多。
無線連接中用的接口是藍(lán)牙和Wi-Fi(IEEE 802.11)。此外,還有采用920 MHz 頻段的Zigbee 標(biāo)準(zhǔn),以及各制造商們的專屬協(xié)議。
網(wǎng)絡(luò)接口
我們用以太網(wǎng)或是Wi-Fi、3G/LTE/5G 來連接外部網(wǎng)絡(luò)
硬件
相對于一般計(jì)算機(jī)而言,網(wǎng)關(guān)在CPU 和內(nèi)存這些硬件的性能方面比較受限。我們需要確定讓網(wǎng)關(guān)做哪些事情,也需要考慮到它的硬件性能。
軟件
使用Linux 操作系統(tǒng)來運(yùn)行網(wǎng)關(guān),還有一個(gè)叫作BusyBox 的軟件,它運(yùn)行起來占用內(nèi)存少,集成了標(biāo)準(zhǔn)的Linux 命令工具。
電源
網(wǎng)關(guān)基本上都是使用AC 適配器當(dāng)電源的,有些網(wǎng)關(guān)本身會(huì)搭載電池
3、服務(wù)器的結(jié)構(gòu)
在功能方面,物聯(lián)網(wǎng)服務(wù)大體上可分為3 個(gè)部分,為前端部分、處理部分,以及數(shù)據(jù)庫部分(圖2.3)
首先,前端部分包括數(shù)據(jù)接收服務(wù)器和數(shù)據(jù)發(fā)送服務(wù)器。數(shù)據(jù)接收服務(wù)器接收設(shè)備和網(wǎng)關(guān)發(fā)來的數(shù)據(jù),轉(zhuǎn)交給后續(xù)的處理部分。數(shù)據(jù)發(fā)送服務(wù)器則剛好相反,它負(fù)責(zé)把從處理服務(wù)器接收到的內(nèi)容發(fā)送給設(shè)備。
通常情況下,Web 服務(wù)的前端部分只接受HTTP 協(xié)議。而物聯(lián)網(wǎng)服務(wù)的前端部分則需要根據(jù)連接設(shè)備的不同來匹配HTTP 以外的協(xié)議。使用者需要考慮到協(xié)議的實(shí)時(shí)性和通信的輕量化,以及能否以服務(wù)器為起點(diǎn)發(fā)送數(shù)據(jù)
處理部分負(fù)責(zé)處理從前端部分接收到的數(shù)據(jù)。這里的“處理”指的是分解數(shù)據(jù)、存儲(chǔ)數(shù)據(jù)、分析數(shù)據(jù)、生成發(fā)給設(shè)備的通知內(nèi)容,等等。數(shù)據(jù)處理包括批處理和流處理等,批處理即把數(shù)據(jù)存入數(shù)據(jù)庫之后一并進(jìn)行處理,而流處理是逐次處理從前端部分收到的數(shù)據(jù)
最后是數(shù)據(jù)庫。這里的數(shù)據(jù)庫不只會(huì)用到關(guān)系數(shù)據(jù)庫,還會(huì)用到NoSQL 數(shù)據(jù)庫。當(dāng)然,使用者需要根據(jù)想存儲(chǔ)的數(shù)據(jù)和想使用的方法來選擇數(shù)據(jù)庫。
4、網(wǎng)關(guān)的作用
網(wǎng)關(guān)是一臺(tái)用于把不能直接連接到互聯(lián)網(wǎng)的設(shè)備轉(zhuǎn)發(fā)連接到互聯(lián)網(wǎng)的設(shè)備。再往細(xì)了說,網(wǎng)關(guān)是由3 種功能構(gòu)成的(圖2.4)。
這3 種功能分別是連接設(shè)備功能、數(shù)據(jù)處理功能和向服務(wù)器發(fā)送數(shù)據(jù)的功能。
連接設(shè)備
設(shè)備和網(wǎng)關(guān)是通過各種各樣的接口連接的。當(dāng)通過傳感器終端連接時(shí),多數(shù)情況下是傳感器單方面持續(xù)向服務(wù)器發(fā)送數(shù)據(jù)。根據(jù)設(shè)備不同,也存在設(shè)備申請從外部獲取數(shù)據(jù)時(shí),服務(wù)器向設(shè)備發(fā)送數(shù)據(jù)的情況,這時(shí)就需要通過網(wǎng)關(guān)申請數(shù)據(jù)。
生成要發(fā)送的數(shù)據(jù)
接下來把從設(shè)備接收到的數(shù)據(jù)轉(zhuǎn)化成能發(fā)送給服務(wù)器的格式。在表示從設(shè)備發(fā)送到網(wǎng)關(guān)的數(shù)據(jù)時(shí),也有把4 位二進(jìn)制數(shù)(如二進(jìn)制數(shù)據(jù)和BCD 碼)替換成一位十進(jìn)制數(shù)數(shù)據(jù)來表示的(圖2.5)。這樣的數(shù)據(jù)不會(huì)被直接發(fā)給服務(wù)器,而是在網(wǎng)關(guān)處被轉(zhuǎn)化成數(shù)值數(shù)據(jù)和字符串的格式。
還存在下面這種情況:不把每臺(tái)設(shè)備發(fā)來的數(shù)據(jù)直接發(fā)送給服務(wù)器,而是將大量數(shù)據(jù)整合在一起再發(fā)送給服務(wù)器。這么做有以下兩個(gè)原因。
第一,通過整合數(shù)據(jù)能減少數(shù)據(jù)的附加信息,減少數(shù)據(jù)量。第二,通過一并發(fā)送數(shù)據(jù)能減輕訪問物聯(lián)網(wǎng)服務(wù)時(shí)對服務(wù)器造成的負(fù)擔(dān)。
發(fā)送數(shù)據(jù)給服務(wù)器
向物聯(lián)網(wǎng)服務(wù)發(fā)送數(shù)據(jù)。此時(shí),需要根據(jù)服務(wù)器來決定發(fā)送數(shù)據(jù)的時(shí)間間隔和發(fā)送數(shù)據(jù)的協(xié)議。另外,為了能從物聯(lián)網(wǎng)的服務(wù)器接收消息,還得事先準(zhǔn)備好這種功能。
5、接收服務(wù)器的作用
數(shù)據(jù)接收服務(wù)器就跟它的字面意思一樣,負(fù)責(zé)接收從設(shè)備發(fā)送來的數(shù)據(jù)。它在設(shè)備和系統(tǒng)之間起著橋梁作用。有很多種方法可以從設(shè)備把數(shù)據(jù)發(fā)送給服務(wù)器,其中具有代表性的包括以下兩種方法。
1.準(zhǔn)備一個(gè)使用了HTTP協(xié)議的Web API來訪問設(shè)備(如通常的Web系統(tǒng))
2.執(zhí)行語音和視頻的實(shí)時(shí)通信(如WebSocket 和WebRTC)
除此之外,還出現(xiàn)了一種名為MQTT 的、專門針對物聯(lián)網(wǎng)的新型通信協(xié)議。
6、HTTP 協(xié)議
HTTP 協(xié)議提供的是大眾化且最簡易的方法。使用一般的Web 框架就可以制作數(shù)據(jù)接收服務(wù)器。設(shè)備用HTTP 的GET 方法和POST 方法訪問服務(wù)器,把數(shù)據(jù)存入請求參數(shù)和BODY 并發(fā)送(圖2.6)。
7、WebSocket
WebSocket 是一種通信協(xié)議,用于在互聯(lián)網(wǎng)上實(shí)現(xiàn)套接字通信。它實(shí)現(xiàn)了Web 瀏覽器和Web 服務(wù)器間的數(shù)據(jù)雙向連續(xù)傳輸。
就HTTP 協(xié)議而言,每次發(fā)送數(shù)據(jù)都必須生成發(fā)送數(shù)據(jù)用的通信路徑及連接。此外,一般情況下,客戶端沒有發(fā)出申請就不能進(jìn)行通信。
相對而言,WebSocket 就不同了。只要一開始根據(jù)客戶端發(fā)出的連接申請確立了連接,就能持續(xù)用同一個(gè)連接傳輸數(shù)據(jù)。另外,只要確立了連接,就算客戶端沒有發(fā)出申請,服務(wù)器也能給客戶端發(fā)送數(shù)據(jù)(圖2.7)。
在發(fā)送語音數(shù)據(jù)等連續(xù)的數(shù)據(jù),以及發(fā)生與服務(wù)器的相互交換時(shí),就能使用WebSocket 了。WebSocket 自身只提供服務(wù)器與客戶端的數(shù)據(jù)交換,因此需要使用者另外決定在應(yīng)用層上使用的協(xié)議。
8、MQTT
MQTT(MQ Telemetry Transport,消息隊(duì)列遙測傳輸)是近年來出現(xiàn)的一種新型協(xié)議,物聯(lián)網(wǎng)領(lǐng)域會(huì)將其作為標(biāo)準(zhǔn)協(xié)議。
MQTT 是一種能實(shí)現(xiàn)一對多通信(人們稱之為發(fā)布或訂閱型)的協(xié)議。它由3 種功能構(gòu)成,分別是中介(broker)、發(fā)布者(publisher)和訂閱者(subscriber)(圖2.8)。
中介承擔(dān)著轉(zhuǎn)發(fā)MQTT 通信的服務(wù)器的作用。
MQTT 交換的消息都附帶“主題”地址,各個(gè)客戶端把這個(gè)“主題”視為收信地址,對其執(zhí)行傳輸消息的操作。形象地比喻一下,中介就是接收郵件的郵箱。
首先,中介在等待各個(gè)客戶端對其進(jìn)行連接。訂閱者連接中介,把自己想訂閱的主題名稱告訴中介。這就叫作訂閱。
然后發(fā)布者連接中介,以主題為收信地址發(fā)送消息。這就是發(fā)布。
發(fā)布者一發(fā)布主題,中介就會(huì)把消息傳遞給訂閱了該主題的訂閱者。
像這樣借助于中介的發(fā)布/ 訂閱型通信,MQTT 就能實(shí)現(xiàn)物聯(lián)網(wǎng)服務(wù)與多臺(tái)設(shè)備之間的通信。另外,MQTT 還實(shí)現(xiàn)了輕量型協(xié)議。因此它還能在網(wǎng)絡(luò)帶寬低、可靠性低的環(huán)境下運(yùn)行;又因?yàn)橄⑿ f(xié)議機(jī)制簡單,所以在硬件資源(設(shè)備、CPU 和內(nèi)存等)受限的條件下也能運(yùn)行,可以說是為物聯(lián)網(wǎng)量身定做的協(xié)議。MQTT 本身還具備特殊的機(jī)制
QoS
QoSA 是Quality of Service(服務(wù)質(zhì)量)的簡稱。這個(gè)詞在網(wǎng)絡(luò)領(lǐng)域表示的是通信線路的品質(zhì)保證
MQTT 里存在3 個(gè)等級(jí)的QoS?!鞍l(fā)布者和中介之間”以及“中介和訂閱者之間”都分別定義了不同的QoS 等級(jí),以異步的方式運(yùn)行。
Retain
如果發(fā)布者事先發(fā)布了帶有Retain 標(biāo)志的消息,那么訂閱者就能在訂閱后馬上收到消息。
當(dāng)發(fā)布者發(fā)布了帶有Retain 標(biāo)志的消息時(shí),中介會(huì)把消息傳遞給訂閱了主題的訂閱者,同時(shí)保存帶有Retain 標(biāo)志的最新的消息。此時(shí),若別的訂閱者訂閱了主題,就能馬上收到帶有Retain 標(biāo)志的新消息(圖2.14)。
Will
Will 有“遺言”的意思。由于中介的I/O 錯(cuò)誤或網(wǎng)絡(luò)故障等情況,發(fā)布者可能會(huì)突然從中介斷開,Will 就是專門針對于這種情況的一個(gè)機(jī)構(gòu),它用于定義中介向訂閱者發(fā)送的消息(圖2.15)。
發(fā)布者在連接中介時(shí)會(huì)用到CONNECT(連接)消息,連接時(shí)對其指定Will 標(biāo)志、要發(fā)送的消息以及QoS。這樣一來,如果連接意外斷開,Will 消息就會(huì)被傳遞給訂閱者。另外,還有一個(gè)標(biāo)志叫作WillRetain。通過指定這個(gè)標(biāo)志,就能跟前面說的Retain 達(dá)到同樣的效果,即在中介處保存消息。
當(dāng)發(fā)布者使用DISCONNECT(斷開連接)消息明確表明連接已斷開時(shí),Will 消息就不會(huì)被發(fā)送給訂閱者。
Clean session
Clean session 用于指定中介是否保留了訂閱者的已訂閱狀態(tài)。用CONNECT 消息連接時(shí),訂閱者把Clean session 標(biāo)志設(shè)定為0 或1。0是保留session,1 是不保留session。
9、 數(shù)據(jù)格式
前面我們圍繞用于接收數(shù)據(jù)的通信過程,即協(xié)議進(jìn)行了講解。事實(shí)上,數(shù)據(jù)就是通過協(xié)議來進(jìn)行交換的。當(dāng)然,就如我們前文所說,這條規(guī)則在物聯(lián)網(wǎng)的世界里也是不變的。數(shù)據(jù)要經(jīng)過協(xié)議進(jìn)行交換,而數(shù)據(jù)2.3 接收數(shù)據(jù)41的格式也很重要。通過Web 協(xié)議來使用的數(shù)據(jù)格式中,具有代表性的包括XML 和JSON(圖2.17)。
圖像、語音、視頻數(shù)據(jù)的處理“傳感器數(shù)據(jù)、文本數(shù)據(jù)”和“圖像、語音、視頻”的數(shù)據(jù)格式差別很大。拿圖像、語音、視頻來說,一條數(shù)據(jù)之巨大遠(yuǎn)遠(yuǎn)超過傳感器數(shù)據(jù),而且這些數(shù)據(jù)是二進(jìn)制數(shù)據(jù),很難轉(zhuǎn)換成字符串,所以就很難用前面介紹的XML 和JSON 格式對它們進(jìn)行處理。用HTTP 發(fā)送圖像數(shù)據(jù)時(shí),可以用XML 或JSON 格式記錄拍攝時(shí)間和設(shè)備的信息,用multi-part/form-data 格式來發(fā)送圖像數(shù)據(jù)。然而,換成語音和視頻時(shí),就是一種時(shí)間上連續(xù)的數(shù)據(jù)。因此,我們在發(fā)送語音和視頻數(shù)據(jù)時(shí)需要下一番工夫。例如,需要把語音和視頻分割成一個(gè)個(gè)小文件來發(fā)送。在用HTTP 協(xié)議進(jìn)行這項(xiàng)操作時(shí),每次發(fā)送一個(gè)小數(shù)據(jù)都會(huì)生成一個(gè)會(huì)話。這樣一來就能通過有效應(yīng)用WebSocket 等協(xié)議來減輕給物聯(lián)網(wǎng)服務(wù)造成的負(fù)擔(dān)了。這種情況下,使用者或許需要使用MessagePack,或是定義一個(gè)專門用于處理二進(jìn)制的格式。再或者,還能以用物聯(lián)網(wǎng)服務(wù)進(jìn)行語音和數(shù)據(jù)分析為前提,只在設(shè)備處提取用于分析的特征并發(fā)送,而不是把所有數(shù)據(jù)一并進(jìn)行發(fā)送。大家在試圖實(shí)現(xiàn)包含語音和視頻數(shù)據(jù)的服務(wù)時(shí),不妨考慮一下本專欄的思路。
10、處理服務(wù)器的作用
處理服務(wù)器就是處理接收到的數(shù)據(jù)的地方??梢詺w納成以下4 種:數(shù)據(jù)分析、數(shù)據(jù)加工、數(shù)據(jù)保存以及向設(shè)備發(fā)出指令(圖2.20)。
11、 批處理
批處理的方法是隔一段時(shí)間就分批處理一次積攢的數(shù)據(jù)。一般情況下是先把數(shù)據(jù)存入數(shù)據(jù)庫里,隔一段時(shí)間就從數(shù)據(jù)庫獲取數(shù)據(jù),執(zhí)行處理。
12、Apache Hadoop
Apache Hadoop 是一個(gè)對大規(guī)模數(shù)據(jù)進(jìn)行分布式處理的開源框架。Hadoop 有一種叫作MapReduce 的機(jī)制,用來高效處理數(shù)據(jù)。MapReduce是一種專門用于在分布式環(huán)境下高效處理數(shù)據(jù)的機(jī)制,它基本由Map、Shuffle、Reduce 這3 種處理構(gòu)成(圖2.21)。
Apache Spark
Apache Spark 也和Hadoop 一樣,是一個(gè)分布式處理大規(guī)模數(shù)據(jù)的開源框架。Spark 用一種叫作RDD(Resilient Distributed Dataset,彈性分布數(shù)據(jù)集)的數(shù)據(jù)結(jié)構(gòu)來處理數(shù)據(jù)(圖2.22)。
13、流處理
批處理是把數(shù)據(jù)攢起來,一次性進(jìn)行處理的方法。相對而言,流處理是不保存數(shù)據(jù),按照到達(dá)處理服務(wù)器的順序?qū)?shù)據(jù)依次進(jìn)行處理。
舉個(gè)例子,假設(shè)有個(gè)系統(tǒng),這個(gè)系統(tǒng)會(huì)對道路上行駛的車輛的當(dāng)前位置和車輛雨刷的運(yùn)轉(zhuǎn)情況進(jìn)行搜集。
僅憑搜集那些雨刷正在運(yùn)轉(zhuǎn)的車輛的當(dāng)前位置,就能夠?qū)崟r(shí)確定哪片地區(qū)正在下雨。此時(shí),使用者可能想保存下過雨的地區(qū)的數(shù)據(jù),這時(shí)候只要保存處理結(jié)果就好,所以原來的傳感器數(shù)據(jù)可以丟掉不要,流處理正適用于這種情況。用流處理平臺(tái)就能實(shí)現(xiàn)流處理。
流處理和批處理一樣,也準(zhǔn)備了框架。在這里就給大家介紹一下Apache Spark 和Apache Storm 這兩個(gè)框架。
Spark Streaming
Spark Streaming 是作為Apache Spark(在“批處理”部分介紹過)的庫被公開的。通過Spark Streaming,就能夠把Apache Spark 拿到流處理中來使用(圖2.23)。
Apache Storm
Apache Storm 是用于實(shí)現(xiàn)流處理的框架,結(jié)構(gòu)如圖2.24 所示。
14、數(shù)據(jù)庫的作用
數(shù)據(jù)庫的作用是保存并靈活運(yùn)用數(shù)據(jù)(圖2.25)。除此之外,其作用還包括從保存的數(shù)據(jù)中找出與所指定條件相符的數(shù)據(jù)。另外,數(shù)據(jù)庫還能把多條數(shù)據(jù)連在一起,把它們作為一個(gè)數(shù)據(jù)取出。
15、數(shù)據(jù)庫的種類和特征
關(guān)系數(shù)據(jù)庫
關(guān)系數(shù)據(jù)庫是人們用得最普遍的數(shù)據(jù)庫。如圖2.25 所示,關(guān)系數(shù)據(jù)庫具備一種叫作表格的表格型數(shù)據(jù)結(jié)構(gòu),其用途在于存儲(chǔ)數(shù)據(jù)庫,使用者用SQL 語言來對其執(zhí)行數(shù)據(jù)的提取、插入以及刪除
鍵值存儲(chǔ)
鍵值存儲(chǔ)屬于NoSQL 數(shù)據(jù)庫的一種。NoSQL 是一種不使用SQL的數(shù)據(jù)庫的統(tǒng)稱。鍵值存儲(chǔ),就是把一種叫作“值”(value)的數(shù)據(jù)值,和能夠一對一特定“值”的“鍵”(key)的集合保存在一起。
文檔型數(shù)據(jù)庫
文檔型數(shù)據(jù)庫和鍵值存儲(chǔ)一樣,都屬于NoSQL 數(shù)據(jù)庫的一種。文檔型數(shù)據(jù)庫能以XML 和JSON 這種結(jié)構(gòu)化文檔的格式保存數(shù)據(jù)。特別是近年來,有一種叫作MongoDB 的文檔型數(shù)據(jù)庫很受歡迎,它以JSON 的格式保存數(shù)據(jù)(圖2.29)。
16、 發(fā)送服務(wù)器的作用
發(fā)送服務(wù)器的目的在于向設(shè)備發(fā)送數(shù)據(jù)并控制設(shè)備。發(fā)送服務(wù)器可以使用2.3 節(jié)介紹過的HTTP、WebSocket、MQTT 協(xié)議和數(shù)據(jù)格式。
一種是通過設(shè)備申請來發(fā)送數(shù)據(jù)的同步傳輸;另一種是由發(fā)送服務(wù)器在任意時(shí)間發(fā)送數(shù)據(jù)的異步傳輸。那么,就用HTTP、WebSocket、MQTT 協(xié)議來看看如何實(shí)現(xiàn)同步和異步傳輸。
17、使用HTTP 發(fā)送數(shù)據(jù)
要實(shí)現(xiàn)數(shù)據(jù)發(fā)送,HTTP 是最簡單的方法。在這個(gè)方法里,發(fā)送服務(wù)器是等待接收HTTP 請求的Web 服務(wù)器。設(shè)備向這臺(tái)服務(wù)器申請發(fā)送數(shù)據(jù),作為響應(yīng),服務(wù)器把數(shù)據(jù)發(fā)給設(shè)備(圖2.30)。
使用者需要定期從設(shè)備執(zhí)行輪詢連接。采用此方法的原因主要有以下兩個(gè)。
原因一:無法確定唯一地址,例如無法給設(shè)備設(shè)定全局IP 地址等。這種情況下,發(fā)送服務(wù)器就不知道應(yīng)該把數(shù)據(jù)發(fā)送給哪臺(tái)設(shè)備了。
原因二:考慮到設(shè)備頻繁斷電和移動(dòng)線路的傳輸費(fèi)用。此時(shí),設(shè)備沒有持續(xù)連接網(wǎng)絡(luò)。即使設(shè)備已經(jīng)連接過網(wǎng)絡(luò),但只要沒有持續(xù)連接,那么,即使發(fā)送服務(wù)器執(zhí)行了發(fā)送數(shù)據(jù)的操作,也發(fā)不到設(shè)備那里去(圖2.31)。
18、使用WebSocket 發(fā)送數(shù)據(jù)
使用WebSocket 時(shí),需要用設(shè)備連接發(fā)送服務(wù)器,并確立WebSocket連接。只要建立了一次WebSocket 連接,就能實(shí)現(xiàn)從發(fā)送服務(wù)器和客戶端發(fā)送數(shù)據(jù)。
19、使用MQTT 發(fā)送數(shù)據(jù)
前文介紹了HTTP 和WebSocket,它們采用的方法都是由設(shè)備訪問發(fā)送服務(wù)器。就這些方法而言,只要客戶端沒有發(fā)出申請,數(shù)據(jù)就不會(huì)被發(fā)送。當(dāng)然使用者也可以在設(shè)備上建立HTTP 和WebSocket 協(xié)議,由服務(wù)器來連接設(shè)備。不過,一旦增加了設(shè)備,服務(wù)器想管理所有設(shè)備就相當(dāng)困難了。
針對這點(diǎn),我們來試著看一下這種服務(wù)器:它靈活運(yùn)用MQTT,并且發(fā)揮了發(fā)布/ 訂閱模型的優(yōu)點(diǎn)。使用MQTT 時(shí)的發(fā)送服務(wù)器如圖2.32所示。
首先設(shè)備作為訂閱者,向MQTT 中介進(jìn)行訂閱。然后,發(fā)送服務(wù)器則是發(fā)布者,同樣向中介進(jìn)行發(fā)布。這樣一來,發(fā)送服務(wù)器只需要把確定的數(shù)據(jù)加在主題上發(fā)送就行了,發(fā)送服務(wù)器和設(shè)備都不需要知道彼此的地址。只要知道中介的地址,就能夠?qū)崿F(xiàn)通信。一旦訂閱者斷開,中介就會(huì)負(fù)責(zé)在斷開時(shí)發(fā)送通知,并在重新連接時(shí)再次發(fā)送數(shù)據(jù)。
作者:星火撩原 來源:博客園
互聯(lián)互通社區(qū)
互聯(lián)互通社區(qū)專注于IT互聯(lián)網(wǎng)交流與學(xué)習(xí),旨在打造最具價(jià)值的IT互聯(lián)網(wǎng)智庫中心,關(guān)注公眾號(hào):互聯(lián)互通社區(qū),每日獲取最新報(bào)告并附帶專題內(nèi)容輔助學(xué)習(xí)。
方案咨詢、數(shù)字化轉(zhuǎn)型、中臺(tái)建設(shè)、前沿技術(shù)培訓(xùn)與交流,合作請+微信:hulianhutongshequ