久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

教你手寫一個簡單的RPC框架

 剩礦空錢 2018-06-05


說起RPC,,大家都已經(jīng)很熟悉了,,隨著soa的出現(xiàn)和普及,,遠(yuǎn)程分布式調(diào)用已經(jīng)成為主流,。今年來流行的微服務(wù)更是讓RPC大放光彩,。目前業(yè)界開源的rpc框架非常多,比較主流的RPC框架有facebook開發(fā)的Apache Thrift,,Hadoop的Avro-RPC,,google開源的gRpc等。dubbo也是基于rpc框架之上的一個服務(wù)治理框架,。

下面將通過java原生的序列化,Socket通信,,動態(tài)代理和反射機制,,實現(xiàn)一個簡單的RPC框架,。

它主要由三部分組成:

1:服務(wù)提供者,,它運行在服務(wù)端,負(fù)責(zé)提供服務(wù)接口定義和服務(wù)實現(xiàn)類。

2:服務(wù)發(fā)布者,,它運行在RPC服務(wù)端,負(fù)責(zé)將本地服務(wù)發(fā)布成遠(yuǎn)程服務(wù),,供其他消費者調(diào)用,。

3:本地服務(wù)代理,它運行在RPC客戶端,通過代理調(diào)用遠(yuǎn)程服務(wù)提供者,,然后將結(jié)果進行封裝返回給本地消費者,。

首先是服務(wù)端接口定義和實現(xiàn):

教你手寫一個簡單的RPC框架

教你手寫一個簡單的RPC框架

服務(wù)端的服務(wù)發(fā)布者代碼如下

教你手寫一個簡單的RPC框架

教你手寫一個簡單的RPC框架

服務(wù)發(fā)布者的主要職責(zé)如下:

1)作為服務(wù)端,監(jiān)聽客戶端的TCP連接,,接收到新的客戶端連接之后,將其封裝成Task,,有線程池執(zhí)行,。

2)將客戶端發(fā)送的碼流反序列化成對象,反射調(diào)用服務(wù)實現(xiàn)者,,獲取執(zhí)行結(jié)果,。

3)將執(zhí)行結(jié)果對象反序列化,,通過Socket發(fā)送給客戶端。

4)遠(yuǎn)程服務(wù)調(diào)用完成之后,,釋放socket等連接資源,,防止句柄泄露,。

接下來是客戶端本地服務(wù)代理源碼:

教你手寫一個簡單的RPC框架

本地服務(wù)代理的主要功能如下:

1)將本地的接口調(diào)用轉(zhuǎn)換成JDK的動態(tài)代理,,在動態(tài)代理中實現(xiàn)接口的遠(yuǎn)程調(diào)用。

2)創(chuàng)建Socket客戶端,,根據(jù)指定地址連接遠(yuǎn)程服務(wù)提供者。

3)將遠(yuǎn)程服務(wù)調(diào)用所需的接口類,方法名,,參數(shù)列表等編碼后發(fā)送給服務(wù)提供者,。

4)同步阻塞等待服務(wù)端返回應(yīng)答,獲取應(yīng)答之后返回。

下面是測試代碼

教你手寫一個簡單的RPC框架

首先,創(chuàng)建一個異步發(fā)布服務(wù)端的線程并啟動,,用于接收RPC客戶端的請求,,根據(jù)請求參數(shù)調(diào)用服務(wù)實現(xiàn)類,,返回結(jié)果給客戶端,。隨后,創(chuàng)建客戶端服務(wù)代理類,,構(gòu)造RPC請求參數(shù),,發(fā)起RPC調(diào)用,,將調(diào)用結(jié)果輸出到控制臺,。執(zhí)行結(jié)果如下圖所示:

教你手寫一個簡單的RPC框架

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多