RPC 手寫乙個RPC框架

2021-10-02 21:15:23 字數 2778 閱讀 9667

基於上一節的內容rpc-準備階段,自己實現乙個基本的rpc框架。

public

class

rpcserverframereg

/** * 註冊服務,就是將介面和實現類儲存到上邊定義的serviceholder中,

* @param serviceinte***ce 介面

* @param impl 介面的實現類

* @throws ioexception

*/public

void

registerservice

(class<

?> serviceinte***ce, class impl

)throws ioexception

}finally

}//任務類,伺服器啟動服務後,如果有請求過來了,就會執行run方法

private

static

class

servertask

implements

runnable

@override

public

void

run(

)//根據類,得到方法

method method = serverclass.

getmethod

( methodname, paramtype )

;//根據方法,類例項,引數得到結果

object result = method.

invoke

( serverclass.

newinstance()

, param )

;//寫到流裡邊。

outputstream.

writeobject

( result )

; outputstream.

flush()

;//返回去

}catch

(exception e)

finally

catch

(ioexception e)}}

}//啟動服務的方法

public

void

startservice()

throws ioexception

}finally

}}

public

class

test

}

public

class

rpcclientframereg

,new

dynproxy

( serviceinte***ce,inetsocketaddress ));

}/**

* 動態**類

* 這個類的作用就是,傳入對應的方法,以及引數,類找到對應的伺服器,將類,方法,引數穿過去, 拿到返回的結果。

*/private

static

class

dynproxy

implements

invocationhandler

@override

public object invoke

(object proxy, method method, object[

] args)

throws throwable

finally

}//第二部 、從上一步拿到的伺服器列表中,隨機(可以用負載均衡的演算法)獲取一台伺服器,然後傳入介面名, 方法名,引數型別,引數,拿到返回值,返回即可

random random =

newrandom()

;int index = random.

nextint

( servicearray.length )

; registerservicevo vo = servicearray[index]

;//隨機獲取乙個伺服器

inetsocketaddress socketaddress =

newinetsocketaddress

( vo.

gethost()

, vo.

getport()

);//遠端伺服器鏈結位址。

tryfinally}}

}

上邊**中用到了registerservicevo這個類,這個類就是乙個簡單的ip埠的bean,如下

private

final string host;

private

final

int port;

public

registerservicevo

(string host,

int port)

public string gethost()

public

intgetport()

當客戶端需要訪問服務端的方法的時候,這樣處理

sendsms sendsms =rpcclientframereg.

getremoteproxyobj

(sendsms.

class);

//然後就可以呼叫服務端的sendsms這個類的各個方法了

sendsms.

sendmail

("123");

//sendsms是自己實現的乙個類

手寫實現RPC 框架

乙個簡易的rpc框架,別的先不多說上github github gitee 註冊中心 zookeeper 使用curator 操作 通訊框架 netty 4.1.25版本 序列化 kryo 以下只寫了大體專案流程,以及展示部分 具體上方github 裡基本都寫了注釋 本rpc框架,有乙個統一的 框架...

乙個自己實現的rpc框架

整合spring配置 檔案頭部加入rpc的namespace 服務端 服務端標籤 其中,protocol標籤屬性分析 port指定服務端繫結的埠 service標籤屬性分析 inte ce指定介面的完整類名,ref指定實現類的id,且該實現類必須放入spring容器中service標籤也可 以用註解...

設計乙個分布式RPC框架

提前先祝大家春節快樂!好了,先簡單聊聊。我從事的是大資料開發相關的工作,主要負責的是大資料計算這塊的內容。最近hive集群跑任務總是會出現thrift連線hs2相關問題,研究了解了下內部原理,突然來了興趣,就想著自己也實現乙個rpc框架,這樣可以讓自己在設計與實現rpc框架過程中,也能從中了解和解決...