RPC結(jié)構(gòu)是怎樣的

這篇文章主要介紹“RPC結(jié)構(gòu)是怎樣的”,在日常操作中,相信很多人在RPC結(jié)構(gòu)是怎樣的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”RPC結(jié)構(gòu)是怎樣的”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供賀州網(wǎng)站建設(shè)、賀州做網(wǎng)站、賀州網(wǎng)站設(shè)計(jì)、賀州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、賀州企業(yè)網(wǎng)站模板建站服務(wù),十載賀州做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

RPC 是什么?

RPC 的全稱是 Remote Procedure Call 是一種進(jìn)程間通信方式。它允許程序調(diào)用另一個(gè)地址空間(通常是共享網(wǎng)絡(luò)的另一臺(tái)機(jī)器上)的過程或函數(shù),而不用程序員顯式編碼這個(gè)遠(yuǎn)程調(diào)用的細(xì)節(jié)。即程序員無論是調(diào)用本地的還是遠(yuǎn)程的,本質(zhì)上編寫的調(diào)用代碼基本相同。

rpc結(jié)構(gòu)

RPC 這個(gè)概念術(shù)語在上世紀(jì) 80 年代由 Bruce Jay Nelson 提出,參考他的論文Implementing Remote Procedure Calls。

Nelson 的論文中指出實(shí)現(xiàn) RPC 的程序包括 5 個(gè)部分:

  • User
  • User-stub
  • RPCRuntime
  • Server-stub
  • Server

這 5 個(gè)部分的關(guān)系如下圖所示

RPC結(jié)構(gòu)是怎樣的  

這里 user 就是 client 端,當(dāng) user 想發(fā)起一個(gè)遠(yuǎn)程調(diào)用時(shí),它實(shí)際是通過本地調(diào)用 user-stub。user-stub 負(fù)責(zé)將調(diào)用的接口、方法和參數(shù)通過約定的協(xié)議規(guī)范進(jìn)行編碼并通過本地的 RPCRuntime 實(shí)例傳輸?shù)竭h(yuǎn)端的實(shí)例。遠(yuǎn)端 RPCRuntime 實(shí)例收到請(qǐng)求后交給 server-stub 進(jìn)行解碼后發(fā)起本地端調(diào)用,調(diào)用結(jié)果再返回給 user 端。

 

RPC 調(diào)用分類

RPC 調(diào)用分以下兩種:

  • 同步調(diào)用:客戶方等待調(diào)用執(zhí)行完成并返回結(jié)果。
  • 異步調(diào)用:客戶方調(diào)用后不用等待執(zhí)行結(jié)果返回,但依然可以通過回調(diào)通知等方式獲取返回結(jié)果。若客戶方不關(guān)心調(diào)用返回結(jié)果,則變成單向異步調(diào)用,單向調(diào)用不用返回結(jié)果。

異步和同步的區(qū)分在于是否等待服務(wù)端執(zhí)行完成并返回結(jié)果。

 

RPC 結(jié)構(gòu)拆解

rpc的詳細(xì)組件如下:

RPC結(jié)構(gòu)是怎樣的  

RPC 服務(wù)方通過 RpcServer 去導(dǎo)出(export)遠(yuǎn)程接口方法,而客戶方通過 RpcClient 去引入(import)遠(yuǎn)程接口方法??蛻舴较裾{(diào)用本地方法一樣去調(diào)用遠(yuǎn)程接口方法,RPC 框架提供接口的代理實(shí)現(xiàn),實(shí)際的調(diào)用將委托給代理RpcProxy 。代理封裝調(diào)用信息并將調(diào)用轉(zhuǎn)交給RpcInvoker 去實(shí)際執(zhí)行。在客戶端的RpcInvoker 通過連接器RpcConnector 去維持與服務(wù)端的通道RpcChannel,并使用RpcProtocol 執(zhí)行協(xié)議編碼(encode)并將編碼后的請(qǐng)求消息通過通道發(fā)送給服務(wù)方。

RPC 服務(wù)端接收器 RpcAcceptor 接收客戶端的調(diào)用請(qǐng)求,同樣使用RpcProtocol 執(zhí)行協(xié)議解碼(decode)。解碼后的調(diào)用信息傳遞給RpcProcessor 去控制處理調(diào)用過程,最后再委托調(diào)用給RpcInvoker 去實(shí)際執(zhí)行并返回調(diào)用結(jié)果。

RPC 組件職責(zé)

各個(gè)組件的職責(zé)如下:

  • RpcServer:負(fù)責(zé)導(dǎo)出(export)遠(yuǎn)程接口
  • RpcClient:負(fù)責(zé)導(dǎo)入(import)遠(yuǎn)程接口的代理實(shí)現(xiàn)
  • RpcProxy:遠(yuǎn)程接口的代理實(shí)現(xiàn)
  • RpcInvoker:客戶方實(shí)現(xiàn):負(fù)責(zé)編碼調(diào)用信息和發(fā)送調(diào)用請(qǐng)求到服務(wù)方并等待調(diào)用結(jié)果返回;服務(wù)方實(shí)現(xiàn):負(fù)責(zé)調(diào)用服務(wù)端接口的具體實(shí)現(xiàn)并返回調(diào)用結(jié)果
  • RpcProtocol:負(fù)責(zé)協(xié)議編/解碼
  • RpcConnector:負(fù)責(zé)維持客戶方和服務(wù)方的連接通道和發(fā)送數(shù)據(jù)到服務(wù)方
  • RpcAcceptor:負(fù)責(zé)接收客戶方請(qǐng)求并返回請(qǐng)求結(jié)果
  • RpcProcessor:負(fù)責(zé)在服務(wù)方控制調(diào)用過程,包括管理調(diào)用線程池、超時(shí)時(shí)間等
  • RpcChannel:數(shù)據(jù)傳輸通道

到此,關(guān)于“RPC結(jié)構(gòu)是怎樣的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

新聞標(biāo)題:RPC結(jié)構(gòu)是怎樣的
當(dāng)前鏈接:http://bm7419.com/article34/jdiise.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷營銷型網(wǎng)站建設(shè)、網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化、小程序開發(fā)、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站