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

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

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

推薦一個(gè)嵌入式 RPC 通信框架

[復(fù)制鏈接]

484

主題

484

帖子

2859

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

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

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

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


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

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

本版積分規(guī)則

關(guān)閉

站長(zhǎng)推薦上一條 /1 下一條


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