【FFH】OpenHarmony啃論文成長計劃---JSON-RPC
原創??https://harmonyos.51cto.com??
大家好! 我是來自深圳技術大學FSR實驗室的同學,標題FFH就是FSRlab For Harmony!并且我也正在參加OpenHarmony成長計劃從論文到開源提交研究,以后我們也會陸續在這個社區記錄學習心得和體會。
參考文獻
JSON-RPC協議分析、擴展及其應用–《中國科技論文在線》2008年02期 (cnki.com.cn)
Web-Based Service Optimization with JSON-RPC Platform in Java and PHP | Haji | International Conference on Engineering and Technology Development (ICETD) (ubl.ac.id)
引言
最近在看JSON相關的文獻和資料,前面我也寫了兩篇JSON相關的文章(有興趣的同學可以去看看):
- OpenHarmony啃論文成長計劃—為什么JSON將逐漸取代XML?
- OpenHarmony啃論文成長計劃—幾種常見的JSON解析器比較
像我這種有一點小程序或者web開發經驗的會對JSON很熟悉,因為我們前端經常把信息格式化為JSON,再調用后端的API進行數據傳遞,我們也清楚的知道web服務那一套基本都是基于HTTP協議的,偶爾使用的是socket進行通信。但是最近在學習手機APP的開發,并且接觸到了一些分布式的系統,發現JSON也可以通過RPC作為分布式系統的數據交換格式,也是這篇文章將要敘述的,稱為JSON-RPC.
RPC
先來了解一下什么是RPC,相信大家會混淆RPC和HTTP,其實他們兩個并不是同一層級的概念,RPC : Remote Procedure Call ,其實是一個很寬泛的概念名稱,翻譯過來就是遠程過程調用,說白了就是一個機器遠程調用并執行另一個機器上的函數。而HTTP是一種協議,HTTP是屬于一種RPC的實現方式。



在HarmonyOS有很多地方都用到了RPC方式通信,比如跨設備調用,遠程拉起FA,FA的遷移流轉等等。
JSON-RPC
摘要
一般應用程序需要本地以外的其他方提供信息。但是這些應用程序可能使用的是不同的系統或者平臺上。web開發上有一種技術可以使用,通常稱為web service。而在應用程序中,JSON-RPC是web service的替代方案之一。比如有兩個信息互通的應用程序,在信息傳遞過程中,應用程序可以執行來自遠程后端服務器的業務,以實現兩個程序直接的通信,即通過使用JSON-RPC來實現web服務。原理如圖:


什么是JSON-RPC?
RPC是一個簡單的協議框架,所以可以用來構建一個基于web的服務的新協議。RPC允許一個應用程序調用遠程另外一個處于不同系統的程序的子進程,RPC在傳遞數據過程中使用一種特定的數據交換格式,如XML或JSON,作為系統之間的粘合劑。傳輸中數據交換格式為JSON格式的RPC 協議就稱為JSON-RPC。
官方的定義是:JSON-RPC 是一個無狀態的輕量級的 RPC 協議。就是說JSON-RPC 是一種遠程過程調用協議。通常的處理機制是在兩個通信實體之間建立點對點的數據連接,在連接的生命周期內,一方可能調用另一方提供的方法,客戶端發送一個請求,而服務器端給出與之相對應的響應。其原理如圖所示:


JSON-RPC的數據結構
比如現在我們需要實現一個減法的功能,服務器和本地相互傳遞的數據結構很簡單,如下:


從本質上講,請求是通過方法名、參數和唯一id發送的。id很重要,尤其是當分布式系統處理來自多個源的多個請求時,因為它告訴被請求系統請求來自何處,這樣才能使響應結果給到正確的請求者。
JSON-RPC與HTTP的區別
先看HTTP,http服務你需要給出對應的接口地址,需要定義http method等等


但是JSON-RPC不需要,因為在調用JSON-RPC的時候客戶端已經傳遞了方法名字,還有請求者的id,還是上面的例子:


所以rpc更像是熟人之間的日常交流,而http像是的陌生人之間的約定,RPC(包括JSON-RPC)調用時,已經知道你是誰,長什么樣,東西放在哪,也知道你允許他使用上面東西,你直接用就完事了。而http就是你需要事先跟陌生人溝通,商量好怎么借和使用別人的東西,才可以使用上。
??https://harmonyos.51cto.com??





































