以下文章來源于嵌入式大雜燴
一、RPC簡介
RPC(Remote Procedure Call,遠程過程調用)機制是一種常用的通信機制。實際上就是要像調用本地的函數一樣去調遠程函數。
RPC機制,在互聯網中應用得比較廣泛。在我們嵌入式中,把傳輸層拓展到IPC、TPC/IP、UART、USB等,很多場景下也都可以用得上。
如:
? 需要發送確認的場景,比如發送某個數據,需要對端回復一個數據進行確認,這種場景,我們可以在應用上進行實現,隨著協議越加越多,對應的回復的代碼也越來越多,但基本都是很相似的代碼。這種下使用RPC機制就比較優雅了,本地發起遠端調用請求,遠端執行完后會將結果返回。
? 應用于進程間的交互:你寫了一段代碼,這段代碼可以調用你電腦上某個服務提供的功能,而不需要關心這個服務運行在你的電腦上還是在網絡的另一端。
? 應用于板間的交互:多個控制板之間需要通信和協作來協調生產過程。使用RPC可以簡化這些控制單元之間的調用和數據共享。
? 應用于端云的交互:IoT設備通常需要和云端服務器或其他設備交互。通過RPC,設備可以遠程調用云服務,實現數據同步、功能升級等操作。
二、RPC的基本原理
嵌入式RPC機制主要由客戶端和服務器兩部分組成:
1、客戶端:發起調用請求,將參數傳遞給遠程方法,并接收服務端返回的結果。在嵌入式系統中,客戶端通常作為非安全環境中的應用程序。
2、服務器:執行客戶端調用的遠程過程,并將結果返回給客戶端。在嵌入式系統中,服務器通常位于安全環境中的可信執行環境(TEE)中,如OP-TEE框架。
這張圖里的network傳輸鏈路,在我們嵌入式中,對于不同的應用場景可以是UART、USB等。
RPC的基本工作原理如下:
1、定義遠程方法接口(服務契約),包括方法名稱、參數類型、返回值類型等信息。
2、生成客戶端和服務端的stub(樁)和skeleton(骨架)代碼。
3、客戶端通過stub調用遠程方法,stub將請求序列化為網絡傳輸格式,然后通過網絡發送給服務端。
4、服務端接收到請求后,通過skeleton進行反序列化,根據接口定義執行遠程方法,并將返回值序列化為網絡傳輸格式,發送給客戶端。
5、客戶端接收到服務端的響應后,通過stub進行反序列化,獲取返回值。
三、RPC的主要特點
跨平臺性:RPC框架可以在不同的操作系統和平臺上運行,實現跨平臺的遠程調用。這一特點使得RPC框架能夠廣泛應用于各種異構環境中,提高了系統的靈活性和適應性。
透明性:RPC框架隱藏了底層的通信細節,使得客戶端能夠像調用本地函數一樣調用遠程函數,無需關注網絡通信的具體實現。這一特點簡化了開發者的編程模型,降低了開發難度。
高效性:RPC框架通常采用二進制數據傳輸和壓縮等技術,使得網絡通信效率更高,比如使用protobuf進行序列化與反序列化。
四、嵌入式RPC框架推薦:erpc
eRPC(嵌入式RPC)是NXP開源的、用于多芯片嵌入式系統和異構多核SoC的開源遠程過程調用(RPC)系統。與其他現代RPC系統(如出色的Apache Thrift)不同,eRPC的與眾不同之處在于它是為緊密耦合的系統設計的,使用純C實現遠程功能,并且代碼大小較小(<5kB)。它不適用于網絡上的高性能分布式系統。
erpc源碼:
https://github.com/EmbeddedRPC/erpc
? 函數的參數和標識符(用于被調用的例程)被序列化成字節流。
? 該字節流通過通信通道(IPC、TPC/IP、UART等)傳輸到服務器。
? 服務器對參數進行反序列化,確定調用了哪個函數,然后調用它。
? 如果函數返回一個值,那么該值將被序列化并通過通信通道發送回客戶端。
erpc主要特點
? 輕量級但可擴展
? 生成的代碼較小
? 抽象傳輸接口
? 序列化數據的大小較小
? 非常適合C語言的環境,也足夠靈活,可以支持面向對象的語言,如c++
? 從服務器到客戶機的異步通知
? 最小化延遲影響
-
嵌入式
+關注
關注
5082文章
19123瀏覽量
305150 -
服務器
+關注
關注
12文章
9160瀏覽量
85415 -
RPC
+關注
關注
0文章
111瀏覽量
11534 -
函數
+關注
關注
3文章
4331瀏覽量
62610
原文標題:推薦一個嵌入式 RPC 通信框架-eRPC
文章出處:【微信號:嵌入式應用研究院,微信公眾號:嵌入式應用研究院】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論