RPC 設計與實現

2021-09-17 02:39:21 字數 2860 閱讀 1881

:磁碟 --> filechannel#read–>bytebuffer(變數)

:bytebuffer(變數)–>filechannel#write–>磁碟

唯讀filechanel: fileinputstream#getchannel();

可寫filechanel: fileoutputstream#getchannel();

bytebuffer常見操作

;//建立bytebuffer

bytebuffer buffer=bytebuffer.

allocate

(1024);

while

(true

)infilechannel.

close()

;outfilechannel.

close()

;網路bio網路程式設計nio網路程式設計nio

//1.建立serversocket

serversocket ss=

newserversocket()

;//2.繫結監聽埠

ss.bind

(new

inetsocketaddress

(9999))

;//3.等待請求到來 **新的socket

system.out.

println

("我在9999等待...");

socket socket = ss.

accept()

;//4.獲取意圖

inputstream is = socket.

getinputstream()

;inputstreamreader isr=

newinputstreamreader

(is)

;bufferedreader br=

newbufferedreader

(isr)

;stringbuilder sb=

newstringbuilder()

;string line=null;

while

((line=br.

readline()

)!=null)

system.out.

println

("伺服器收到:"

+sb.

tostring()

);//4.給出響應

outputstream os = socket.

getoutputstream()

;printwriter pw=

newprintwriter

(os)

;pw.

println

(new

date()

.tolocalestring()

);pw.flush()

;//5.告知客戶端寫結束

socket.

shutdownoutput()

;//6.釋放socket資源

socket.

close()

;

nio

//1.建立serversocket

serversocketchannel ssc= serversocketchannel.

open()

;//2.繫結監聽埠

ssc.

bind

(new

inetsocketaddress

(9999))

;//3.設定通道非阻塞

ssc.

configureblocking

(false);

//4.建立selector 通道選擇器

selector selector= selector.

open()

;//5.註冊通道事件

ssc.

register

(selector, selectionkey.op_accept)

;while

(true

)else

if(key.

isreadable()

)//註冊寫

sc.register

(selector,selectionkey.op_write,baos);}

else

if(key.

iswritable()

)//移除事件

iterator.

remove()

;}

RPC的概念與實現

rpc全稱為remote procedure call,俗稱遠端過程呼叫。rpc是一種程式設計模型,程式設計思路,它的出現是為了解決分布式服務 微服務 架構中,不同服務之間方便且高效呼叫 的問題,遠端呼叫時,要能夠像本地呼叫一樣方便,讓呼叫者感知不到遠端呼叫的邏輯。rpc 與 restful 1 r...

RPC實現原理

rpc remote procedure call 遠端過程呼叫,是乙個計算機通訊協議。該協議允許執行於一台計算機的程式呼叫另一台計算機的子程式,而程式設計師無需額外地為這個互動作用程式設計。兩個或多個應用程式都分布在不同的伺服器上,它們之間的呼叫都像是本地方法呼叫一樣,如下圖。阿里的dubbo g...

實現RPC框架

什麼是rpc client端 student student call serveraddr,addage,student 1.將這個呼叫對映為call id。2.將call id,student params 序列化,以二進位制形式打包 3.把2中得到的資料報傳送給serveraddr,這需要使用...