1. 程式人生 > 實用技巧 >自己寫一個JAVA遠端呼叫簡答框架(RPC)小白入門(代理模式Porxy)

自己寫一個JAVA遠端呼叫簡答框架(RPC)小白入門(代理模式Porxy)

文章目錄


前言

相信大家一定知道Java中介面的概念吧,我們可以在一個介面中先定義一些方法,但這些方法裡卻並不能出現方法體,而我們想要讓這個介面中的方法有意義,那我們必須要寫一個介面實現類,在這個類中實現介面的方法(寫入有意義的方法體),這樣就比較麻煩,當我們進行團隊協作的時候,免不了要進行分工合作,那麼我們能不能分別的在各自的電腦上去寫好介面的實現類,然後通過某種連線去讓夥伴不用寫介面的具體實現類,而通過呼叫我們的電腦上寫好的具體實現類中的方法去獲得他們想要的值呢?答案是可行的,這就引出了我們的解決方法:RPC遠端過程呼叫


提示:以下是本篇文章正文內容,下面案例可供參考

一、RPC是什麼?

示例:)它的意思是遠端過程呼叫,即一種通過網路從遠端計算機程式上請求服務,而不需要了解底層網路技術的協議。

二、實現思路

我們是不是可以將我們想要呼叫的介面中的方法名,和引數通過網路通訊傳送給已經實現了這個介面的伺服器上,然後借伺服器的“手”來通過建立類物件,呼叫方法,傳入引數,取回返回值,然後在通過網路通訊傳送給客戶端,客戶端來通過網路通訊進行接收,然後得到了返回值,這不就是相當於實現了這個方法的價值麼(成功的呼叫了方法,並且取到了返回值),這雖然不是我們自己去實現了這個介面中的方法,但我們拿到了我們想要的東西,這在團隊協作上是一件多麼提高工作效率的是呀。

這個方法的精髓就是網路通訊:

客戶端的一寫(寫入介面名,呼叫的方法名,需要傳入的引數)一讀(讀取伺服器端通過網路傳送回來的此方法的返回值)實現了RPC。
伺服器端的一讀(讀取客戶端傳來的介面名,呼叫的方法名,需要傳入的引數)一寫(瞭解了客戶端的意圖,呼叫方法,將返回值寫入)實現了RPC。

1.建立遠端伺服器

在伺服器上建立一個介面,作為以後給客戶端提供可呼叫的方法,然後將這個介面打包成jar包,將來發送給客戶端,然後在另外一個包下實現介面的方法

這是需要打包成jar包的介面
這是我們在另外一個包下寫的介面的實現類
這是伺服器端的部分程式碼
這是伺服器端的部分程式碼

2.建立客戶端

我們客戶端需要乾的只有三件事:
1.通過jar包得知伺服器給我們提供了那些方法
2.選擇方法進行呼叫,將方法名,引數,介面名通過網路傳給伺服器

3.接受伺服器傳回來的返回值
這就是我們客戶端最終逍遙的結果程式碼

1.首先,我們呼叫方法必須得要有一個被例項化的物件,通過物件名.方法名(引數)才能呼叫方法,那麼我們首先要做的是拿到一個物件,但是我們現在並沒有伺服器提供的這個介面的實現類物件,這就需要引出我們的代理模式——>Porxy類物件,拿到這個物件後,我們就可以吧他當做是這個介面實現了的類物件,然後呼叫介面中的方法,然後網路通訊傳值的事情就交給代理去做,然後把返回值返回,代理裡面的程式碼就是我們客戶端的核心程式碼

代理模式(小白解釋)

把我們當做是高考後的考生,我們需要找到一個能通過我們的高考成績來給我們選擇出一個最佳的填報方案,然後只需要我們給錢,然後他就會吧這個最佳方案給我們,我們自己不再需要去進行對比前幾年的資料來尋找合適了學校,我們就拿到了最佳的填報志願的方案。
上述描述中的高考填報機構(組織)就是代理模式Proxy
而建立Proxy需要一個很重要的引數:Handle
這個Handle便是我們和機構中的那個對接老師(內個高考機構不可能只有一個老師,一定會有一個老師專門負責和你進行對接),而在Handle中,才是我們真正需要寫的客戶端程式碼,即給發給這個對接的老師我們的資訊(高考分數,想去的城市等等等等)
在這個Handle中有個重要的invoke方法,這個方法裡面就是放我們想要在這個代理乾的事情,比如我們找這個填報志願的機構就是想要去讓它通過我們的高考成績,給我們一個合適的填報方案,這就是我們想要代理去幹的事情,客戶端的核心程式碼其實是在這個invoke方法裡面
這個invoke裡面的方法會在呼叫由Proxy動態建立的代理物件.方法名(引數)的時候自動被呼叫。
這是獲得代理物件的方法
這是我們Handle類中的程式碼(核心程式碼)
這是我們Handle類中的程式碼(核心程式碼)

總結

以上就是今天要講的內容,本文僅僅簡單的利用網路通訊和代理模式簡單的實現了一個RPC遠端呼叫框架,寫的不好,便於小白快速上手,如有錯誤,還請不惜賜教。