【FFH】OpenHarmony啃論文成長計劃---JSON-RPC
原創(chuàng)??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??
大家好! 我是來自深圳技術(shù)大學(xué)FSR實驗室的同學(xué),標(biāo)題FFH就是FSRlab For Harmony!并且我也正在參加OpenHarmony成長計劃從論文到開源提交研究,以后我們也會陸續(xù)在這個社區(qū)記錄學(xué)習(xí)心得和體會。
參考文獻
JSON-RPC協(xié)議分析、擴展及其應(yīng)用–《中國科技論文在線》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相關(guān)的文獻和資料,前面我也寫了兩篇JSON相關(guān)的文章(有興趣的同學(xué)可以去看看):
- OpenHarmony啃論文成長計劃—為什么JSON將逐漸取代XML?
- OpenHarmony啃論文成長計劃—幾種常見的JSON解析器比較
像我這種有一點小程序或者web開發(fā)經(jīng)驗的會對JSON很熟悉,因為我們前端經(jīng)常把信息格式化為JSON,再調(diào)用后端的API進行數(shù)據(jù)傳遞,我們也清楚的知道web服務(wù)那一套基本都是基于HTTP協(xié)議的,偶爾使用的是socket進行通信。但是最近在學(xué)習(xí)手機APP的開發(fā),并且接觸到了一些分布式的系統(tǒng),發(fā)現(xiàn)JSON也可以通過RPC作為分布式系統(tǒng)的數(shù)據(jù)交換格式,也是這篇文章將要敘述的,稱為JSON-RPC.
RPC
先來了解一下什么是RPC,相信大家會混淆RPC和HTTP,其實他們兩個并不是同一層級的概念,RPC : Remote Procedure Call ,其實是一個很寬泛的概念名稱,翻譯過來就是遠程過程調(diào)用,說白了就是一個機器遠程調(diào)用并執(zhí)行另一個機器上的函數(shù)。而HTTP是一種協(xié)議,HTTP是屬于一種RPC的實現(xiàn)方式。
在HarmonyOS有很多地方都用到了RPC方式通信,比如跨設(shè)備調(diào)用,遠程拉起FA,F(xiàn)A的遷移流轉(zhuǎn)等等。
JSON-RPC
摘要
一般應(yīng)用程序需要本地以外的其他方提供信息。但是這些應(yīng)用程序可能使用的是不同的系統(tǒng)或者平臺上。web開發(fā)上有一種技術(shù)可以使用,通常稱為web service。而在應(yīng)用程序中,JSON-RPC是web service的替代方案之一。比如有兩個信息互通的應(yīng)用程序,在信息傳遞過程中,應(yīng)用程序可以執(zhí)行來自遠程后端服務(wù)器的業(yè)務(wù),以實現(xiàn)兩個程序直接的通信,即通過使用JSON-RPC來實現(xiàn)web服務(wù)。原理如圖:
什么是JSON-RPC?
RPC是一個簡單的協(xié)議框架,所以可以用來構(gòu)建一個基于web的服務(wù)的新協(xié)議。RPC允許一個應(yīng)用程序調(diào)用遠程另外一個處于不同系統(tǒng)的程序的子進程,RPC在傳遞數(shù)據(jù)過程中使用一種特定的數(shù)據(jù)交換格式,如XML或JSON,作為系統(tǒng)之間的粘合劑。傳輸中數(shù)據(jù)交換格式為JSON格式的RPC 協(xié)議就稱為JSON-RPC。
官方的定義是:JSON-RPC 是一個無狀態(tài)的輕量級的 RPC 協(xié)議。就是說JSON-RPC 是一種遠程過程調(diào)用協(xié)議。通常的處理機制是在兩個通信實體之間建立點對點的數(shù)據(jù)連接,在連接的生命周期內(nèi),一方可能調(diào)用另一方提供的方法,客戶端發(fā)送一個請求,而服務(wù)器端給出與之相對應(yīng)的響應(yīng)。其原理如圖所示:
JSON-RPC的數(shù)據(jù)結(jié)構(gòu)
比如現(xiàn)在我們需要實現(xiàn)一個減法的功能,服務(wù)器和本地相互傳遞的數(shù)據(jù)結(jié)構(gòu)很簡單,如下:
從本質(zhì)上講,請求是通過方法名、參數(shù)和唯一id發(fā)送的。id很重要,尤其是當(dāng)分布式系統(tǒng)處理來自多個源的多個請求時,因為它告訴被請求系統(tǒng)請求來自何處,這樣才能使響應(yīng)結(jié)果給到正確的請求者。
JSON-RPC與HTTP的區(qū)別
先看HTTP,http服務(wù)你需要給出對應(yīng)的接口地址,需要定義http method等等
但是JSON-RPC不需要,因為在調(diào)用JSON-RPC的時候客戶端已經(jīng)傳遞了方法名字,還有請求者的id,還是上面的例子:
所以rpc更像是熟人之間的日常交流,而http像是的陌生人之間的約定,RPC(包括JSON-RPC)調(diào)用時,已經(jīng)知道你是誰,長什么樣,東西放在哪,也知道你允許他使用上面東西,你直接用就完事了。而http就是你需要事先跟陌生人溝通,商量好怎么借和使用別人的東西,才可以使用上。
??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??
??https://harmonyos.51cto.com??