當年思過崖上,令狐沖苦戰田伯光,幸得風老前輩指引:你先使一招‘白虹貫日’,跟着便使‘有鳳來儀’,再使一招‘金雁橫空’,接下來使‘截劍式’……一口氣口若懸河的說了三十招招式。那三十招招式令狐沖都曾學過,連貫起來卻何其複雜,還好有風老前輩指導,擺脫拘泥不化,融會貫通,終悟獨孤九劍。git
現在的IT設備種類繁多,客廳的電視,牆上的攝像頭,手心的手機,耳朵裏的藍牙耳機,手腕上的智能手錶,桌上的電腦;它們能夠獨立工做,也能夠用某種方式進行相互鏈接;但若是但願它們協同工做,發揮出更大的威力,就要顛覆傳統的觀念,用新的視角來理解它們;如今想法有了,招式也有了(各IT設備),缺的是融合;華爲的鴻蒙OS便爲此而生,其中的分佈式軟總線模塊,即是劍法心經。web
無招勝有招,有了分佈式軟總線的加持,咱們名下的這些設備能夠實現無縫互聯,對於用戶而言,不管設備在哪,以什麼方式進行接入,之間如何互通,這些複雜的邏輯由鴻蒙搞定,無視距離和協議的界限,便可以最簡單的方式,高效、安全地進行數據交互。安全
同時在鴻蒙OS的體系中,分佈式軟總線也是另外兩大絕學 - 分佈式數據管理和分佈式任務調度的基石;所以學習和理解分佈式軟總線,也是深刻了解整個鴻蒙OS不錯的入口。微信
鴻蒙OS代碼已逐步開源,下載源碼並不是難事;分佈式軟中線代碼倉庫地址以下:session
- communication_interfaces_kits_softbuskit_lite
https://gitee.com/openharmony/communication_interfaces_kits_softbuskit_litesocket
- communication_services_softbus_lite
https://gitee.com/openharmony/communication_services_softbus_litetcp
顧名思義,分別對應它的接口和實現;而communication_services_softbus_lite源碼結構中,又分爲authmanager、discovery、trans_service、 和爲兼容系統差異而生的os_adapter四大目錄。分佈式
authmanager提供設備認證機制和設備知識庫管理,當發現有請求時,調用ProcessDataEvent函數,收包,檢驗包頭,根據數據包的類型肯定不一樣的處理方式。類型主要包括如下三種:函數
- MODULE_AUTH_SDK 加密數據類型
- MODULE_TRUST_ENGINE 可信類型,直接進行數據傳輸
- MODULE_CONNECTION 進行ip及設備認證
authmanager源碼結構及功能概述以下:學習
- auth_conn.c
提供發送、接收、認證、獲取祕鑰功能;
- auth_interface.c
管理各個會話節點、各個連接節點、各個祕鑰節點,提供包括增刪改查等功能;
- msg_get_deviceid.c
提供以cJSON格式獲取各個設備的信息,包括設備id、連接信息、設備名、設備類型等;
- bus_manager.c
主要經過deviceIp建立兩個不一樣的listen,主要用來監聽系統上有哪些device及新的device節點的建立;其中有兩個回調函數OnConnectEvent和OnDataEvent,分別是用來處理設備節點的基本操做及節點數據的處理;
- wifi_auth_manager.c
主要實現了鏈接管理和數據接收功能。鏈接管理包括鏈接的創建、斷開及鏈接的查找。數據接收包括數據獲取、包頭及包長等的校驗,而且爲了簡化包頭數據讀取,單獨實現了對一個int型和一個long型數據的接收函數;
discover,它是一種基於coap協議的設備發現機制,爲何選擇coap協議?
由於物聯網設備的ram,rom都一般很是小,運行TCP和HTTP是不能夠接受的。而coap(Constrained Application Protocol、受限應用協議)是一種在物聯網世界的類web協議,顧名思義,能夠使用在資源受限的物聯網設備上。
它支持可靠傳輸的輕量化協議。discover的設備發現功能就是用的這個特性。
discovery 代碼包含coap和discovery_service兩部分,coap部分是coap協議封裝實現,discovery_service 是基於coap協議設備的發現流程實現。
discovery的實現前提是確保發現端設備與接收端設備在同一個局域網內且能互相收到對方的報文。大體流程是:
- 發現端設備,使用coap協議在局域網內發送廣播;
- 接收端設備使用PublishService接口發佈服務,接收端收到廣播後,發送coap協議單播給發現端;
- 發現端設備收到報文會更新設備信息。
trans_service目錄中的代碼提供身份驗證和傳輸通道。它主要封裝了socket、cJSON、線程鎖接口,實現了用戶的建立、監聽、會話管理,以及設備、指令、數據等信息的獲取,最終提供加密和解密傳輸兩種傳輸通道。
trans_service源碼結構及功能概述以下:
- auth_conn_manager.c
用戶建立,監聽,鏈接等服務管理;
- tcp_session_manager.c
會話管理;
- trans_lock.c
互斥鎖初始化以及互斥鎖資源獲取與釋放;
- aes_gcm.c
提供加密傳輸和解密傳輸接口;
- messages.c
用於獲取以cJSON格式管理的設備(包括設備名、設備類型、設備ID等)、指令、數據、會話(包括用戶端口、會話端口等)等信息;
- tcp_socket.c
端口號管理以及數據傳輸管理。
歡迎掃碼關注潤小云的微信公衆號。