參考文檔:
http://javatar.iteye.com/blog/1123915
http://www.importnew.com/22003.html
概念
RPC(Remote Procedure Call Protocol)遠(yuǎn)程過(guò)程調(diào)用協(xié)議允蜈,它是一種通過(guò)網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請(qǐng)求服務(wù)藤乙,而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC不依賴于具體的網(wǎng)絡(luò)傳輸協(xié)議荡碾,tcp、udp等都可以阅束。由于存在各式各樣的變換和細(xì)節(jié)差異捺弦,相應(yīng)的rpc也派生出了各式遠(yuǎn)程過(guò)程通信協(xié)議。
RPC相當(dāng)于封裝了網(wǎng)絡(luò)請(qǐng)求代碼谋作,如常用的socket請(qǐng)求芋肠,并且結(jié)合了動(dòng)態(tài)代理模式,可以方便地進(jìn)行遠(yuǎn)程方法調(diào)用(想了解動(dòng)態(tài)代理模式可以去看之前寫的java設(shè)計(jì)模式之代理模式)瓷们。
使用socket實(shí)現(xiàn)RPC框架
閱讀http://javatar.iteye.com/blog/1123915這篇博客中的示例代碼可知业栅,可以使用socket連接來(lái)實(shí)現(xiàn)RPC框架,當(dāng)應(yīng)用A想執(zhí)行應(yīng)用B的其中一個(gè)方法時(shí)谬晕,首先使用動(dòng)態(tài)代理模式碘裕,通過(guò)調(diào)用代理類的方法來(lái)間接調(diào)用應(yīng)用B的具體方法,由于應(yīng)用A和應(yīng)用B之間需要網(wǎng)絡(luò)通信攒钳,所以代理類的內(nèi)部通過(guò)socket連接的方式實(shí)現(xiàn)通信帮孔。請(qǐng)求中指明了要調(diào)B的哪一個(gè)方法,以及要傳哪些參數(shù)等不撑。在B應(yīng)用中文兢,通過(guò)監(jiān)聽端口,捕獲到A的請(qǐng)求后焕檬,使用反射的機(jī)制姆坚,找到最終要調(diào)用的方法并執(zhí)行后返回給A。