物聯(lián)網(wǎng)系統(tǒng)開發(fā):從0到1構(gòu)建IoT平臺(tái) 第2版 付強(qiáng) 傅靜濤
定 價(jià):99 元
本書是一部從技術(shù)原理、工程實(shí)踐、設(shè)計(jì)模式和最佳實(shí)踐等多個(gè)維度詳細(xì)講解物聯(lián)網(wǎng)系統(tǒng)和產(chǎn)品開發(fā)的著作。它涵蓋物聯(lián)網(wǎng)應(yīng)用開發(fā)80%的場(chǎng)景,能指導(dǎo)讀者零基礎(chǔ)的讀者從0到1構(gòu)建一個(gè)功能齊備的物聯(lián)網(wǎng)平臺(tái),并附有代碼和解釋。本書既有作者在物聯(lián)網(wǎng)行業(yè)多年實(shí)操經(jīng)驗(yàn)的總結(jié),也結(jié)合了作者在高校的多年教學(xué)實(shí)踐經(jīng)驗(yàn),是一本既適合高校學(xué)生、物聯(lián)網(wǎng)初學(xué)者,也適合有經(jīng)驗(yàn)的物聯(lián)網(wǎng)開發(fā)者和架構(gòu)師閱讀的佳作。本書第1版是物聯(lián)網(wǎng)系統(tǒng)開發(fā)領(lǐng)域的暢銷書,幾乎零差評(píng)。第2版新增了全面解析MQTT 5.0協(xié)議特性的內(nèi)容,同時(shí),為了適配EMQX最新版本,對(duì)書中的相關(guān)代碼和配置均進(jìn)行了更新。全書共14章,分為三大部分:第一部分(第1~2章)物聯(lián)網(wǎng)基礎(chǔ)介紹物聯(lián)網(wǎng)基礎(chǔ)知識(shí),涵蓋物聯(lián)網(wǎng)的概念和常用協(xié)議。第二部分(第3~6章)MQTT協(xié)議詳解與實(shí)戰(zhàn)詳細(xì)講解MQTT協(xié)議,通過詳盡的示例代碼對(duì)物聯(lián)網(wǎng)的核心協(xié)議MQTT協(xié)議的規(guī)范和特性進(jìn)行講解。內(nèi)容包括MQTT 3.1.1和MQTT 5.0。第三部分(第7~14章)實(shí)戰(zhàn):從零開始搭建一個(gè)IoT平臺(tái)物聯(lián)網(wǎng)平臺(tái)開發(fā)實(shí)戰(zhàn),講解如何使用開源組件從0到1構(gòu)建一個(gè)功能完備的物聯(lián)網(wǎng)平臺(tái)。
(1)作者背景權(quán)威:作者曾就職于趨勢(shì)科技、諾基亞,現(xiàn)擔(dān)任某物聯(lián)網(wǎng)企業(yè)的CTO,在物聯(lián)網(wǎng)領(lǐng)域有較大的影響力。(2)作者經(jīng)驗(yàn)豐富:作者在物聯(lián)網(wǎng)領(lǐng)域從業(yè)近15年,一直致力于物聯(lián)網(wǎng)軟硬件產(chǎn)品和平臺(tái)的設(shè)計(jì)和開發(fā),經(jīng)驗(yàn)豐富。(3)暢銷書全新升級(jí):第1版是物聯(lián)網(wǎng)領(lǐng)域的暢銷書,累計(jì)印刷10余次,網(wǎng)店零差評(píng),是讀者公認(rèn)的經(jīng)典著作。(4)零基礎(chǔ)可上手:可指導(dǎo)沒有任務(wù)物聯(lián)網(wǎng)技術(shù)基礎(chǔ)的讀者理解物聯(lián)網(wǎng)的核心協(xié)議,并從0到1開發(fā)功能齊備的物聯(lián)網(wǎng)平臺(tái)。(5)注重實(shí)戰(zhàn):本書以實(shí)戰(zhàn)為導(dǎo)向,手把手逐步教讀者開發(fā)物聯(lián)網(wǎng)平臺(tái),附案例代碼,并給出了解釋。
Preface 前 言為什么要寫這本書2011年我在硅谷的時(shí)候,曾經(jīng)參與設(shè)計(jì)和開發(fā)了一個(gè)物聯(lián)網(wǎng)平臺(tái)。這個(gè)平臺(tái)的目的是為各種物聯(lián)網(wǎng)設(shè)備提供統(tǒng)一的通信接口,以及提供數(shù)據(jù)存儲(chǔ)和分析功能,降低物聯(lián)網(wǎng)設(shè)備商的開發(fā)和運(yùn)營(yíng)成本。不過,由于物聯(lián)網(wǎng)設(shè)備的異構(gòu)性太強(qiáng),同時(shí)平臺(tái)的愿景過于超前,而當(dāng)時(shí)物聯(lián)網(wǎng)應(yīng)用的發(fā)展包括資本的投入都遠(yuǎn)不及現(xiàn)在,這個(gè)項(xiàng)目不得不半路中止。2015年,我在國(guó)內(nèi)和朋友聯(lián)合創(chuàng)辦了一家物聯(lián)網(wǎng)相關(guān)的公司。為了支持公司的硬件產(chǎn)品,我們開發(fā)了一個(gè)提供統(tǒng)一通信和數(shù)據(jù)服務(wù)的物聯(lián)網(wǎng)平臺(tái),不過吸取了之前的教訓(xùn),這個(gè)平臺(tái)只對(duì)同一組織(公司)里的多個(gè)產(chǎn)品提供支持。當(dāng)時(shí)各大云服務(wù)商,比如阿里云,提供了非常成熟的物聯(lián)網(wǎng)套件,我們將這些物聯(lián)網(wǎng)套件中的一些功能移植到了自研的物聯(lián)網(wǎng)平臺(tái)上。這個(gè)平臺(tái)從技術(shù)層面很好地支持了公司從0到1、從1到N持續(xù)盈利的全流程。在這個(gè)過程中我遇到過一些問題,也總結(jié)出一些非常有用的經(jīng)驗(yàn)。在此期間,我也加入了一些物聯(lián)網(wǎng)開發(fā)者的社區(qū)。在日常的技術(shù)交流里,我發(fā)現(xiàn)一些開發(fā)人員對(duì)常用的物聯(lián)網(wǎng)協(xié)議的理解是有問題的,對(duì)一些功能應(yīng)該在協(xié)議層面實(shí)現(xiàn)還是在業(yè)務(wù)層面實(shí)現(xiàn)不是很清楚。我曾在互聯(lián)網(wǎng)上搜索過相關(guān)的技術(shù)文章,發(fā)現(xiàn)系統(tǒng)性講解協(xié)議的規(guī)范和特性的文章非常少,不是只對(duì)一兩個(gè)功能進(jìn)行介紹,就是只翻譯協(xié)議規(guī)范,缺乏代碼示例。在這種情況下,我在GitChat的專欄寫了我的第一篇文章《MQTT協(xié)議快速入門》,詳細(xì)地講解了物聯(lián)網(wǎng)應(yīng)用中最常見的MQTT協(xié)議的規(guī)范和特性,并對(duì)每一個(gè)特性附以豐富的代碼示例。加入專欄文章的讀者交流群后,我又發(fā)現(xiàn)讀者還有很多關(guān)于設(shè)計(jì)、業(yè)務(wù)架構(gòu)的疑問,深入理解MQTT協(xié)議并不能解決這些問題。這讓我意識(shí)到,物聯(lián)網(wǎng)應(yīng)用開發(fā)并不像Web開發(fā)那樣有成熟的設(shè)計(jì)模式和框架可以使用,開發(fā)者往往都是從協(xié)議級(jí)別開始往上搭,重復(fù)地造輪子。因此,我覺得有必要把我們?cè)陂_發(fā)物聯(lián)網(wǎng)平臺(tái)中遇到的困難和總結(jié)的經(jīng)驗(yàn)分享出來,從協(xié)議開始講起,再覆蓋物聯(lián)網(wǎng)后臺(tái)開發(fā)中常見的設(shè)計(jì)模式和最佳實(shí)踐,讓其他的物聯(lián)網(wǎng)開發(fā)者少走一些彎路,少造一些輪子,進(jìn)而更快速、更高效地上線自己的產(chǎn)品。讀者對(duì)象物聯(lián)網(wǎng)應(yīng)用開發(fā)人員物聯(lián)網(wǎng)架構(gòu)師物聯(lián)網(wǎng)平臺(tái)開發(fā)人員對(duì)物聯(lián)網(wǎng)感興趣的開發(fā)人員有一定經(jīng)驗(yàn)的IM平臺(tái)、移動(dòng)推送平臺(tái)開發(fā)人員渴望學(xué)習(xí)更多物聯(lián)網(wǎng)實(shí)際開發(fā)經(jīng)驗(yàn)的人員如何閱讀本書本書涵蓋物聯(lián)網(wǎng)應(yīng)用開發(fā)80%的場(chǎng)景,理論和實(shí)戰(zhàn)并重。本書內(nèi)容分為三大部分。第一部分(第1~2章)為物聯(lián)網(wǎng)基礎(chǔ)知識(shí)介紹,涵蓋物聯(lián)網(wǎng)的概念和常用協(xié)議。第二部分(第3~6章)為MQTT協(xié)議詳解,通過詳盡的示例代碼對(duì)MQTT 3.1.1和MQTT 5.0協(xié)議的規(guī)范和特性進(jìn)行講解。第三部分(第7~14章)為物聯(lián)網(wǎng)平臺(tái)開發(fā)實(shí)戰(zhàn),從零開始用開源的組件搭建一個(gè)名為Maque IotHub的物聯(lián)網(wǎng)平臺(tái),在這個(gè)過程中講解物聯(lián)網(wǎng)后臺(tái)開發(fā)中常見的設(shè)計(jì)模式和最佳實(shí)踐。本書最后補(bǔ)充有結(jié)語與附錄。結(jié)語總結(jié)了本書講到的相關(guān)系統(tǒng)與知識(shí)體系,附錄介紹了運(yùn)行Maque IotHub的方法和步驟。如果你對(duì)MQTT協(xié)議已經(jīng)非常了解,可以直接從第三部分開始看起,第二部分可作為協(xié)議規(guī)范參考指南。如果你是一名初學(xué)者,請(qǐng)務(wù)必從第1章的基礎(chǔ)知識(shí)開始學(xué)習(xí)。勘誤和支持由于作者的水平有限,書中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請(qǐng)讀者批評(píng)指正。書中大量的實(shí)例代碼都可以從我的GitHub站點(diǎn)(https://github.com/suf?ish)下載。你也可以關(guān)注我在GitChat的專欄(https://gitbook.cn/gitchat/author/59ed8409991df70ecd5a0f8f),并加入專欄讀者群進(jìn)行交流。如果你有更多的寶貴意見,也歡迎發(fā)郵件到y(tǒng)fc@hz.cmpbook.com。期待能夠得到你們的真摯反饋。致謝首先要感謝EMQX的開發(fā)者和貢獻(xiàn)者,開發(fā)和維護(hù)一款強(qiáng)大的開源MQTT Broker非常不易。感謝GitChat提供平臺(tái)并促成了本書的出版。感謝在寫作過程中很多人的支持與幫助,他們是:趙華振、李斌鋒、鄧斌、戚祥、于偉、皮文星、陳育春、陸正武、虞曉東、張恒汝、高喆、劉威、劉冉、付志濤、宗杰、王大平、李振捷、李波、張鵬、管西京、閆芳、王玉芹、王秀明、楊振珂! 感謝公司的全體同人,大家的共同努力才給我提供了一個(gè)能夠?qū)嵺`自己想法的機(jī)會(huì)。最后感謝關(guān)心我的家人,尤其是我的妻子和女兒,她們的支持是我完成本書的動(dòng)力!謹(jǐn)以此書獻(xiàn)給我最親愛的家人,以及廣大物聯(lián)網(wǎng)開發(fā)者!
付 強(qiáng)
付強(qiáng),資深物聯(lián)網(wǎng)技術(shù)專家,有超過15年的物聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗(yàn),現(xiàn)擔(dān)任某物聯(lián)網(wǎng)軟硬件解決方案公司的創(chuàng)始人兼CTO。曾就職于趨勢(shì)科技、諾基亞創(chuàng)新中心硅谷實(shí)驗(yàn)室,專注于物聯(lián)網(wǎng)軟硬件產(chǎn)品和平臺(tái)的設(shè)計(jì)和開發(fā)。 CSDN專欄作者,撰寫了多篇物聯(lián)網(wǎng)和AI相關(guān)的專欄文章。傅靜濤,工信部高級(jí)項(xiàng)目經(jīng)理,在一流高校從事相關(guān)專業(yè)科研和教學(xué)近30年, 在物聯(lián)網(wǎng)領(lǐng)域有非常深厚的積累。主持和實(shí)施了多個(gè)物聯(lián)網(wǎng)軟硬件產(chǎn)品和平臺(tái)的研發(fā)與落地。
目 錄 Contents前言第一部分 物聯(lián)網(wǎng)基礎(chǔ)第1章 什么是物聯(lián)網(wǎng) 21.1 物聯(lián)網(wǎng)和人工智能 31.2 物聯(lián)網(wǎng)的現(xiàn)狀與前景 4第2章 常見的物聯(lián)網(wǎng)協(xié)議 62.1 MQTT協(xié)議 62.2 MQTT-SN協(xié)議 72.3 CoAP 82.4 LwM2M協(xié)議 92.5 HTTP 92.6 LoRaWAN協(xié)議 92.7 NB-IoT協(xié)議 102.8 本章小結(jié) 10第二部分 MQTT協(xié)議詳解與實(shí)戰(zhàn)第3章 MQTT協(xié)議基礎(chǔ) 133.1 MQTT協(xié)議的通信模型 133.2 MQTT的不同版本 143.3 MQTT Client 143.4 MQTT Broker 163.5 MQTT協(xié)議數(shù)據(jù)包格式 173.6 本章小結(jié) 19第4章 MQTT 3.1.1協(xié)議詳解 204.1 建立到Broker的連接 204.1.1 CONNECT數(shù)據(jù)包 204.1.2 CONNACK數(shù)據(jù)包 234.1.3 關(guān)閉連接 254.1.4 代碼實(shí)踐 264.2 訂閱與發(fā)布 294.2.1 PUBLISH數(shù)據(jù)包 304.2.2 代碼實(shí)踐:發(fā)布消息 324.2.3 訂閱一個(gè)主題 324.2.4 代碼實(shí)踐:訂閱主題 354.2.5 取消訂閱 374.3 QoS及其最佳實(shí)踐 404.3.1 MQTT協(xié)議中的QoS等級(jí) 404.3.2 QoS0 404.3.3 QoS1 414.3.4 QoS2 424.3.5 代碼實(shí)踐:使用不同的QoS發(fā)布消息 454.3.6 實(shí)際的QoS 484.3.7 QoS的最佳實(shí)踐 484.4 Retained消息和LWT 494.4.1 Retained消息 494.4.2 代碼實(shí)踐:發(fā)布和接收Retained消息 504.4.3 LWT 524.4.4 代碼實(shí)踐:監(jiān)控Client連接狀態(tài) 524.5 Keep Alive與連接保活 544.5.1 Keep Alive 544.5.2 代碼實(shí)踐 564.5.3 連接;睢574.6 本章小結(jié) 59第5章 MQTT 5.0協(xié)議詳解 605.1 協(xié)議包內(nèi)容擴(kuò)展 605.1.1 屬性集 605.1.2 原因碼 605.2 更完善的連接管理 635.2.1 獲取MQTT Broker的連接屬性 635.2.2 代碼實(shí)踐:建立MQTT 5.0連接 655.2.3 Client主動(dòng)斷開連接 655.2.4 代碼實(shí)踐:主動(dòng)斷開連接,觸發(fā)遺愿機(jī)制 665.2.5 Broker主動(dòng)斷開連接 675.2.6 代碼實(shí)踐:處理客戶端標(biāo)識(shí)符沖突 675.3 更完善的會(huì)話管理 685.3.1 清理會(huì)話啟動(dòng) 695.3.2 會(huì)話過期時(shí)間 695.3.3 代碼實(shí)踐:在CONNECT數(shù)據(jù)包中設(shè)定會(huì)話過期時(shí)間 705.3.4 代碼實(shí)踐:在DISCONNECT數(shù)據(jù)包中更新會(huì)話過期時(shí)間 705.4 新增消息過期機(jī)制 715.4.1 消息過期時(shí)間 715.4.2 代碼實(shí)踐:發(fā)布帶有過期時(shí)間的消息 725.5 協(xié)議級(jí)別支持共享訂閱 735.5.1 如何使用共享訂閱 735.5.2 代碼實(shí)踐:使用共享訂閱 745.5.3 代碼實(shí)踐:使用帶通配符的共享訂閱 755.5.4 代碼實(shí)踐:多個(gè)共享訂閱組 765.6 數(shù)據(jù)包可攜帶用戶屬性 775.6.1 為什么要引入用戶屬性 775.6.2 典型的使用場(chǎng)景 785.7 可聲明消息體格式 795.7.1 為什么要聲明消息體格式 795.7.2 如何聲明消息體格式 795.7.3 代碼實(shí)踐:發(fā)布帶有消息體格式的消息 795.8 可設(shè)置主題別名 805.8.1 主題名映射 815.8.2 代碼實(shí)踐:使用主題別名 815.9 新增請(qǐng)求/響應(yīng)模式 825.9.1 MQTT 5.0之前的解決方案 825.9.2 MQTT 5.0的解決方案 835.9.3 代碼實(shí)踐:使用請(qǐng)求/響應(yīng)模式進(jìn)行數(shù)據(jù)交互 845.10 訂閱時(shí)可指定訂閱標(biāo)識(shí)符 855.10.1 訂閱標(biāo)識(shí)符 855.10.2 代碼實(shí)踐:使用訂閱標(biāo)識(shí)符 855.11 更完善的訂閱選項(xiàng) 865.11.1 QoS等級(jí)選項(xiàng) 875.11.2 非本地選項(xiàng) 875.11.3 保留Retain標(biāo)識(shí)符選項(xiàng) 875.11.4 保留消息處理選項(xiàng) 875.11.5 代碼實(shí)踐:設(shè)置非本地選項(xiàng) 875.11.6 代碼實(shí)踐:設(shè)置保留Retain標(biāo)識(shí)符選項(xiàng) 885.11.7 代碼實(shí)踐:設(shè)置保留消息處理選項(xiàng) 895.12 更完善的認(rèn)證機(jī)制 915.13 本章小結(jié) 92第6章 MQTT協(xié)議實(shí)戰(zhàn) 936.1 AI IoT項(xiàng)目實(shí)戰(zhàn) 936.1.1 用TensorFlow在Android系統(tǒng)上進(jìn)行物體識(shí)別 936.1.2 如何在MQTT協(xié)議里傳輸大文件 946.1.3 消息去重 956.1.4 最終的消息數(shù)據(jù)格式 956.1.5 代碼實(shí)踐:上傳識(shí)別結(jié)果 956.1.6 在瀏覽器中運(yùn)行MQTT Client 976.1.7 代碼實(shí)踐:接收識(shí)別結(jié)果 976.1.8 搭建私有MQTT Broker 986.1.9 傳輸層安全 1006.2 MQTT常見問題解答 1016.3 開發(fā)物聯(lián)網(wǎng)應(yīng)用,學(xué)會(huì)MQTT協(xié)議就夠了嗎 1016.4 本章小結(jié) 103第三部分 實(shí)戰(zhàn):從零開始搭建 一個(gè)IoT平臺(tái)第7章 準(zhǔn)備工作臺(tái) 1077.1 安裝需要的組件 1077.2 Maque IotHub的組成部分 1087.3 項(xiàng)目結(jié)構(gòu) 1097.3.1 IotHub Server 1097.3.2 IotHub DeviceSDK 1097.4 本章小結(jié) 111第8章 設(shè)備生命周期管理 1128.1 設(shè)備注冊(cè) 1128.1.1 設(shè)備三元組 1128.1.2 EMQX的認(rèn)證方式 1138.1.3 設(shè)備接入流程 1178.1.4 Server API:設(shè)備注冊(cè) 1188.1.5 調(diào)整EMQX配置 1208.1.6 修改DeviceSDK 1218.1.7 Server API:設(shè)備信息查詢 1228.1.8 Server API:獲取接入IotHub的一次性密碼(JWT) 1238.1.9 完善細(xì)節(jié) 1258.2 設(shè)備連接狀態(tài)管理 1278.2.1 Poor mans Solution 1278.2.2 使用EMQX的解決方案 1288.2.3 管理設(shè)備的連接狀態(tài) 1328.3 設(shè)備的禁用與刪除 1368.3.1 禁用設(shè)備 1368.3.2 刪除設(shè)備 1418.4 設(shè)備權(quán)限管理 1428.4.1 為什么要控制Publish和Subscribe權(quán)限 1428.4.2 EMQX的ACL功能 1428.4.3 集成EMQX的ACL功能 1468.5 給IotHub加一點(diǎn)擴(kuò)展性 1488.5.1 EMQX的縱向擴(kuò)展 1488.5.2 EMQX的橫向擴(kuò)展 1498.6 本章小結(jié) 151第9章 上行數(shù)據(jù)處理 1529.1 選擇一個(gè)可擴(kuò)展的方案 1529.1.1 完全基于MQTT協(xié)議的方案 1539.1.2 基于WebHook的方案 1549.1.3 數(shù)據(jù)格式 1559.1.4 主題名規(guī)劃 1569.1.5 上行數(shù)據(jù)存儲(chǔ) 1569.1.6 通知業(yè)務(wù)系統(tǒng) 1579.1.7 上行數(shù)據(jù)查詢 1579.1.8 上行數(shù)據(jù)處理流程 1579.2 實(shí)現(xiàn)上行數(shù)據(jù)處理功能 1589.2.1 DeviceSDK的功能實(shí)現(xiàn) 1589.2.2 IotHub Server的功能實(shí)現(xiàn) 1609.2.3 代碼聯(lián)調(diào) 1629.2.4 通知業(yè)務(wù)系統(tǒng) 1649.2.5 Server API歷史消息查詢 1679.3 設(shè)備狀態(tài)上報(bào) 1689.3.1 設(shè)備狀態(tài) 1689.3.2 DeviceSDK的實(shí)現(xiàn) 1699.3.3 IotHub Server 的實(shí)現(xiàn) 1699.3.4 Server API:查詢?cè)O(shè)備狀態(tài) 1719.3.5 代碼聯(lián)調(diào) 1729.3.6 為何不用Retained消息 1729.4 時(shí)序數(shù)據(jù)庫 1739.4.1 時(shí)序數(shù)據(jù) 1739.4.2 時(shí)序數(shù)據(jù)庫概述 1749.4.3 收集設(shè)備連接狀態(tài)變化的數(shù)據(jù) 1749.5 本章小結(jié) 177第10章 下行數(shù)據(jù)處理 17810.1 選擇一個(gè)可擴(kuò)展的方案 17910.1.1 完全基于 MQTT協(xié)議的方案 17910.1.2 基于EMQX RESTful API的方案 18010.1.3 下行數(shù)據(jù)格式 18010.1.4 主題名規(guī)劃 18110.1.5 如何訂閱主題 18210.1.6 設(shè)備端消息去重 18210.1.7 指令回復(fù) 18310.2 DeviceSDK端的實(shí)現(xiàn) 18310.2.1 消息去重 18310.2.2 提取元數(shù)據(jù) 18410.2.3 處理指令 18510.2.4 回復(fù)指令 18610.3 服務(wù)端的實(shí)現(xiàn) 18710.3.1 更新ACL 列表 18710.3.2 EMQX發(fā)布功能 18710.3.3 Server API:發(fā)送指令 18810.3.4 Broker自動(dòng)訂閱 18910.3.5 通知業(yè)務(wù)系統(tǒng) 19010.3.6 代碼聯(lián)調(diào) 19210.4 本章小結(jié) 195第11章 IotHub的高級(jí)功能 19611.1 RPC式調(diào)用 19611.1.1 主題規(guī)劃 19711.1.2 等待指令回復(fù) 19811.1.3 服務(wù)端實(shí)現(xiàn) 19811.1.4 Server API:發(fā)送RPC指令 20011.1.5 更新設(shè)備ACL列表 20111.1.6 更新服務(wù)器訂閱列表 20111.1.7 DeviceSDK端實(shí)現(xiàn) 20211.1.8 代碼聯(lián)調(diào) 20311.2 設(shè)備數(shù)據(jù)請(qǐng)求 20411.2.1 更新設(shè)備ACL列表 20511.2.2 服務(wù)端實(shí)現(xiàn) 20611.2.3 DeviceSDK端實(shí)現(xiàn) 20711.2.4 代碼聯(lián)調(diào) 20711.3 NTP服務(wù) 20911.3.1 IotHub 的 NTP 服務(wù) 20911.3.2 DeviceSDK端實(shí)現(xiàn) 21011.3.3 服務(wù)端實(shí)現(xiàn) 21111.3.4 代碼聯(lián)調(diào) 21211.4 設(shè)備分組 21211.4.1 功能設(shè)計(jì) 21311.4.2 服務(wù)端實(shí)現(xiàn) 21511.4.3 DeviceSDK端實(shí)現(xiàn) 21811.4.4 代碼聯(lián)調(diào) 22111.5 M2M設(shè)備間通信 22311.5.1 主題名規(guī)劃 22311.5.2 服務(wù)端實(shí)現(xiàn) 22411.5.3 DeviceSDK端實(shí)現(xiàn) 22511.5.4 代碼聯(lián)調(diào) 22511.6 OTA升級(jí) 22711.6.1 功能設(shè)計(jì) 22711.6.2 服務(wù)端實(shí)現(xiàn) 22911.6.3 DeviceSDK端實(shí)現(xiàn) 23311.6.4 代碼聯(lián)調(diào) 23511.7 設(shè)備影子 23811.7.1 什么是設(shè)備影子 23811.7.2 設(shè)備影子的數(shù)據(jù)結(jié)構(gòu) 23811.7.3 設(shè)備影子的數(shù)據(jù)流向 23911.7.4 服務(wù)端實(shí)現(xiàn) 24111.7.5 DeviceSDK端實(shí)現(xiàn) 24611.7.6 代碼聯(lián)調(diào) 24811.8 本章小結(jié) 250第12章 擴(kuò)展EMQX Broker 25112.1 EMQX的插件系統(tǒng) 25112.1.1 Erlang語言 25212.1.2 安裝編譯工具 25212.2 我們會(huì)用到的Erlang特性 25312.2.1 Erlang簡(jiǎn)介 25312.2.2 變量和賦值 25412.2.3 特殊的 Erlang 數(shù)據(jù)類型 25512.2.4 模式匹配 25512.2.5 模塊與函數(shù) 25612.2.6 宏定義 25712.2.7 OTP 25712.3 搭建開發(fā)和編譯環(huán)境 25712.3.1 使用插件模板 25712.3.2 代碼結(jié)構(gòu) 25712.3.3 編譯和打包 26012.4 實(shí)現(xiàn)基于RabbitMQ的Hook插件:emqx_rabbitmq?_?plugin 26012.4.1 插件配置文件 26012.4.2 建立RabbitMQ的連接池 26112.4.3 處理client.connected事件 26312.4.4 處理client.disconnected事件 26312.4.5 處理message.publish事件 26412.5 使用emqx_rabbitmq?_?plugin插件 26512.5.1 安裝和啟用插件 26512.5.2 測(cè)試插件 26612.5.3 管理插件配置 26712.5.4 集成emqx_rabbitmq?_?plugin插件 26812.5.5 IotHub 的全新架構(gòu) 26912.6 本章小結(jié) 270第13章 集成CoAP 27113.1 CoAP簡(jiǎn)介 27113.1.1 CoAP的消息模型 27213.1.2 CoAP的請(qǐng)求/響應(yīng)機(jī)制 27213.1.3 CoAP OBSERVE 27313.1.4 CoAP HTTP網(wǎng)關(guān) 27313.2 集成CoAP到IotHub 27413.2.1 EMQX的CoAP網(wǎng)關(guān) 27413.2.2 設(shè)備發(fā)起連接 27713.2.3 設(shè)備上報(bào)數(shù)據(jù) 27913.2.4 設(shè)備發(fā)送心跳 28013.2.5 設(shè)備主動(dòng)斷開連接 28113.3 本章小結(jié) 282第14章 使用其他語言擴(kuò)展 EMQX 28314.1 EMQX的gRPC鉤子 28314.2 gRPC簡(jiǎn)介 28414.3 基于EMQX的gRPC鉤子實(shí)現(xiàn)插件功能 28414.3.1 ExHook的服務(wù)定義 28414.3.2 代碼結(jié)構(gòu) 28614.3.3 OnProviderLoaded接口 28714.3.4 OnClientConnected接口 28814.3.5 OnClientDisconnected接口 29014.3.6 OnMessagePublish接口 29014.4 啟用emqx_rabbitmq?_node_plugin 29314.5 本章小結(jié) 294結(jié)語 我們學(xué)到了什么 295附錄A 如何運(yùn)行Maque IotHub 299