加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 一、RPC簡(jiǎn)介
    • 二、RPC的基本原理
    • 三、RPC的主要特點(diǎn)
    • 四、嵌入式RPC框架推薦:erpc
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

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

10/25 14:27
1266
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

一、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框架推薦:erpc

eRPC(嵌入式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)程功能,并且代碼大小較?。?lt;5kB)。它不適用于網(wǎng)絡(luò)上的高性能分布式系統(tǒng)

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ī)的異步通知

??最小化延遲影響

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

本公眾號(hào)專注于嵌入式技術(shù),包括但不限于C/C++、嵌入式、物聯(lián)網(wǎng)、Linux等編程學(xué)習(xí)筆記,同時(shí),公眾號(hào)內(nèi)包含大量的學(xué)習(xí)資源。歡迎關(guān)注,一同交流學(xué)習(xí),共同進(jìn)步!