OpenWrt開發必備軟體模組——ubus
作者|傅寬,單位:中國移動智慧家庭運營中心
Labs 導讀
OpenWrt 提供了一個系統匯流排ubus,它類似於Linux桌面作業系統的d-Bus,目標是提供系統級的程序間通訊(IPC)功能。ubus在設計理念上與d-Bus基本保持一致,提供了系統級匯流排功能,與d-Bus相比減少了系統記憶體佔用空間,這樣可以適應於嵌入式Linux作業系統的低記憶體和低端CPU效能的特殊環境。
ubus為openwrt平臺開發中的程序間通訊提供了一個通用的框架。它讓程序間通訊的實現變得非常簡單。ubus實現的基礎是unix socket,即本地socket,它比用於網路通訊的inet socket更高效,更具可靠性。unix socket客戶端和伺服器的實現方式和網路socket類似。
Part 01 如何實現一個簡單的unix socket伺服器和客戶
首先,建立一個socket server端,繫結到一個本地socket檔案,並開啟對clients連線的監聽。其次,建立一個或多個socket client端,連線server。client和server相互發送訊息。client或server收到對方訊息後,針對具體訊息進行相應處理。
Part 02 ubus通訊框架
ubus同樣實現了上述元件,並對socket連線以及訊息傳輸和處理進行了封裝。
ubus提供了一個socket server:ubusd。因此開發者不需要自己實現server端。
ubus提供了建立socket client端的介面,並且提供了的客戶端供使用者直接使用。
ubus的內部框架大體如下圖:
其中的Ubus Daemon就是ubusd,它是一個服務管理的伺服器。上圖右下角的元件是一個Client,用於向ubusd請求服務。而左下角是一個服務提供者(相對於ubusd它其實也是個Client,這裡稱之為Server實際上是相對於服務請求者Client而言,不要搞混了)。上圖中Server和Client之間通訊的訊息採用json格式。
Part 03 ubus訊息格式及有效通訊的方式
ubus對client和server之間通訊的訊息為json格式。
ubus對client端的訊息處理抽象出“物件(object)”和“方法(method)”的概念。一個物件中包含多個方法,client需要向server註冊自己的處理方法。物件和方法都有自己的名字,請求方只需在訊息中指定要呼叫的物件和方法的名字即可。
Part 04 ubus引用的一些動態庫
libubus.so:建立socket,進行監聽和連線,傳送訊息等介面函式。
libubox.so:等待和讀取訊息。
libblobmsg.so,libjson.so:提供了封裝和解析json資料的介面,程式設計時不需要直接使用libjson.so,而是使用libblobmsg.so提供的更靈活的介面函式。
使用ubus進行程序間通訊不需要編寫大量程式碼,只需按照固定模式呼叫ubus提供的API介面即可。
- 每個開發人員都應該學習的5種程式語言(上)
- 我們一起聊聊包含min函式的棧
- iOS 16值不值得升級,正式版主要功能搶先看
- OpenHarmony3.0如何輕鬆連線華為雲IoT裝置接入平臺?
- 使用Python輕鬆獲取Binance歷史交易
- 良心推薦!Python爬蟲高手必備的8大技巧!
- 手摸手教你定製 Spring Security 表單登入
- 為什麼啟動執行緒不直接呼叫run(),而要呼叫start(),如果呼叫兩次start()方法會有什麼後果
- 種草兩個可以畫 Flowable 流程圖的 Vue 庫!
- 15個提高 Javascript 開發的 技巧
- Spring 使用 Mypy 檢查 30 萬行程式碼,總結出三大痛點與六個技巧
- 用Python製作我的核酸檢測日曆
- 前端模組化的前世今生
- 對 Go2 錯誤處理提案的批判
- 如何使用AuraDB構建Java微服務
- 提升前端開發質量的十點經驗沉澱
- 在生產環境中使用 Linkerd
- 多圖剖析公式 Async=Promise Generator 自動執行器
- 談談ArrayList、Vector和LinkedList 的儲存效能及特性
- 機器學習區塊鏈:最重要的進步和你需要知道的