- 整體結構:在IPC包中,最重要的3個(gè)類(lèi)是Server,Client和RPC,它們具有層次化的結構。
- RPC類(lèi)是對Server、Client的具體化。在RPC類(lèi)中規定,客戶(hù)程序發(fā)出請求調用時(shí),參數類(lèi)型必須是Invocation;從服務(wù)器返回的值類(lèi)型必須是ObjectWritable。為了加強理解,可以查看測試類(lèi)TestIPC。在那里,規定的參數類(lèi)型與返回值類(lèi)型都是LongWritable。
- RPC類(lèi)是對Server、Client的包裝,簡(jiǎn)化用戶(hù)的使用。如果一個(gè)類(lèi)需充當服務(wù)器,只需通過(guò)RPC類(lèi)的靜態(tài)方法getServer獲得Server實(shí)例,然后start。同時(shí)此類(lèi)提供協(xié)議接口的實(shí)現。如果一個(gè)類(lèi)充當客戶(hù)端,可以通過(guò)getProxy或者waitForProxy獲得一個(gè)實(shí)現了協(xié)議接口的proxy object,與服務(wù)器端交互。為了加強理解,可以查看測試類(lèi)TestRPC,在那里,實(shí)現的協(xié)議接口為T(mén)estProtocol。
- Server類(lèi)
- 啟動(dòng)Listener進(jìn)程。如果收到需要建立連接的請求,將建立連接,然后在上面捕獲讀操作的命令。收到命令之后,將把解析客戶(hù)端發(fā)過(guò)來(lái)信息的工作委派給Connection。Connection把信息封裝到Call對象中,放入隊列中,待Handler處理。
- 啟動(dòng)指定數目的Handler線(xiàn)程,處理客戶(hù)端對指定方法調用的請求,然后把結果返回給客戶(hù)端。
- Client類(lèi)
- 用Call封裝好調用信息,然后借助從連接池中取出的Connection向服務(wù)器端發(fā)送,等待結果。如果到指定服務(wù)器的Connection不存在,將馬上建立。Connection線(xiàn)程讀取服務(wù)器方法調用的返回信息。完成之后,通知主線(xiàn)程。
- RPC類(lèi)
- 對外使用的窗口,隱藏了Server和Client的背后細節,驗證RPC協(xié)議版本。

