電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 63|回復(fù): 0
收起左側(cè)

推薦一個嵌入式 RPC 通信框架

[復(fù)制鏈接]

489

主題

489

帖子

3007

積分

四級會員

Rank: 4

積分
3007
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 6 天前 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
一、RPC簡介RPC(Remote Procedure Call,遠程過程調(diào)用)機制是一種常用的通信機制。實際上就是要像調(diào)用本地的函數(shù)一樣去調(diào)遠程函數(shù)。
RPC機制,在互聯(lián)網(wǎng)中應(yīng)用得比較廣泛。在我們嵌入式中,把傳輸層拓展到IPC、TPC/IP、UART、USB等,很多場景下也都可以用得上。
如:
? 需要發(fā)送確認的場景,比如發(fā)送某個數(shù)據(jù),需要對端回復(fù)一個數(shù)據(jù)進行確認,這種場景,我們可以在應(yīng)用上進行實現(xiàn),隨著協(xié)議越加越多,對應(yīng)的回復(fù)的代碼也越來越多,但基本都是很相似的代碼。這種下使用RPC機制就比較優(yōu)雅了,本地發(fā)起遠端調(diào)用請求,遠端執(zhí)行完后會將結(jié)果返回。
? 應(yīng)用于進程間的交互:你寫了一段代碼,這段代碼可以調(diào)用你電腦上某個服務(wù)提供的功能,而不需要關(guān)心這個服務(wù)運行在你的電腦上還是在網(wǎng)絡(luò)的另一端。
? 應(yīng)用于板間的交互:多個控制板之間需要通信和協(xié)作來協(xié)調(diào)生產(chǎn)過程。使用RPC可以簡化這些控制單元之間的調(diào)用和數(shù)據(jù)共享。
? 應(yīng)用于端云的交互:IoT設(shè)備通常需要和云端服務(wù)器或其他設(shè)備交互。通過RPC,設(shè)備可以遠程調(diào)用云服務(wù),實現(xiàn)數(shù)據(jù)同步、功能升級等操作。
二、RPC的基本原理

嵌入式RPC機制主要由客戶端和服務(wù)器兩部分組成:
1、客戶端:發(fā)起調(diào)用請求,將參數(shù)傳遞給遠程方法,并接收服務(wù)端返回的結(jié)果。在嵌入式系統(tǒng)中,客戶端通常作為非安全環(huán)境中的應(yīng)用程序。
2、服務(wù)器:執(zhí)行客戶端調(diào)用的遠程過程,并將結(jié)果返回給客戶端。在嵌入式系統(tǒng)中,服務(wù)器通常位于安全環(huán)境中的可信執(zhí)行環(huán)境(TEE)中,如OP-TEE框架。
這張圖里的network傳輸鏈路,在我們嵌入式中,對于不同的應(yīng)用場景可以是UART、USB等。
RPC的基本工作原理如下:
1、定義遠程方法接口(服務(wù)契約),包括方法名稱、參數(shù)類型、返回值類型等信息。
2、生成客戶端和服務(wù)端的stub(樁)和skeleton(骨架)代碼。
3、客戶端通過stub調(diào)用遠程方法,stub將請求序列化為網(wǎng)絡(luò)傳輸格式,然后通過網(wǎng)絡(luò)發(fā)送給服務(wù)端。
4、服務(wù)端接收到請求后,通過skeleton進行反序列化,根據(jù)接口定義執(zhí)行遠程方法,并將返回值序列化為網(wǎng)絡(luò)傳輸格式,發(fā)送給客戶端。
5、客戶端接收到服務(wù)端的響應(yīng)后,通過stub進行反序列化,獲取返回值。
三、RPC的主要特點跨平臺性:RPC框架可以在不同的操作系統(tǒng)和平臺上運行,實現(xiàn)跨平臺的遠程調(diào)用。這一特點使得RPC框架能夠廣泛應(yīng)用于各種異構(gòu)環(huán)境中,提高了系統(tǒng)的靈活性和適應(yīng)性。
透明性:RPC框架隱藏了底層的通信細節(jié),使得客戶端能夠像調(diào)用本地函數(shù)一樣調(diào)用遠程函數(shù),無需關(guān)注網(wǎng)絡(luò)通信的具體實現(xiàn)。這一特點簡化了開發(fā)者的編程模型,降低了開發(fā)難度。
高效性:RPC框架通常采用二進制數(shù)據(jù)傳輸和壓縮等技術(shù),使得網(wǎng)絡(luò)通信效率更高,比如使用protobuf進行序列化與反序列化。
四、嵌入式RPC框架推薦:erpceRPC(嵌入式RPC)是NXP開源的、用于多芯片嵌入式系統(tǒng)和異構(gòu)多核SoC的開源遠程過程調(diào)用(RPC)系統(tǒng)。與其他現(xiàn)代RPC系統(tǒng)(如出色的Apache Thrift)不同,eRPC的與眾不同之處在于它是為緊密耦合的系統(tǒng)設(shè)計的,使用純C實現(xiàn)遠程功能,并且代碼大小較。

erpc源碼:
https://github.com/EmbeddedRPC/erpc


? 函數(shù)的參數(shù)和標(biāo)識符(用于被調(diào)用的例程)被序列化成字節(jié)流。
? 該字節(jié)流通過通信通道(IPC、TPC/IP、UART等)傳輸?shù)椒⻊?wù)器。
? 服務(wù)器對參數(shù)進行反序列化,確定調(diào)用了哪個函數(shù),然后調(diào)用它。
? 如果函數(shù)返回一個值,那么該值將被序列化并通過通信通道發(fā)送回客戶端。
erpc主要特點? 輕量級但可擴展
? 生成的代碼較小
? 抽象傳輸接口
? 序列化數(shù)據(jù)的大小較小
? 非常適合C語言的環(huán)境,也足夠靈活,可以支持面向?qū)ο蟮恼Z言,如c++
? 從服務(wù)器到客戶機的異步通知
? 最小化延遲影響
回復(fù)

使用道具 舉報

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)閉

站長推薦上一條 /1 下一條


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表