Rpc框架 一 要點介紹

2021-10-25 06:37:08 字數 4301 閱讀 8459

rpc是遠端過程呼叫,可做到像本地一樣呼叫遠端服務,是一種程序間通訊方式。

1.本地函式呼叫

本地函式即為常用的函式方法,通過傳入引數或者直接呼叫即可得出輸出,操作過程在同乙個程序中進行。

2.socket

socket可支援在不同程序間進行通訊,這需約定乙個通訊協議進行傳參和函式呼叫,返回結果。

3.rpc框架

rpc能夠像呼叫本地一樣呼叫遠端服務,使用者不需要關心其底層的實現。

rpc框架的要點

rpc框架中,我們關心的有如下幾個部分:

1.通訊協議(protocol)

協議要確定通訊雙方的格式(請求物件和響應物件)

協議物件rpcprotocol

public

class

rpcprotocol

implements

serializable

public

static rpcprotocol fromjson

(string json)

@override

public

boolean

equals

(object o)

private

boolean

islistequals

(list

thislist, list

thatlist)if(

(thislist == null && thatlist != null)

||(thislist != null && thatlist == null)

||(thislist.

size()

!= thatlist.

size()

))return thislist.

containsall

(thatlist)

&& thatlist.

containsall

(thislist);}

@override

public

inthashcode()

@override

public string tostring()

public string gethost()

public

void

sethost

(string host)

public

intgetport()

public

void

setport

(int port)

public list

getserviceinfolist()

public

void

setserviceinfolist

(list

serviceinfolist)

}

請求物件rpcrequest

public

class

rpcrequest

implements

serializable

public

void

setrequestid

(string requestid)

public string getclassname()

public

void

setclassname

(string classname)

public string getmethodname()

public

void

setmethodname

(string methodname)

public class<

?>

getparametertypes()

public

void

setparametertypes

(class<

?>

parametertypes)

public object[

]getparameters()

public

void

setparameters

(object[

] parameters)

public string getversion()

public

void

setversion

(string version)

}

響應物件 rpcresponse

public

class

rpcresponse

implements

serializable

public string getrequestid()

public

void

setrequestid

(string requestid)

public string geterror()

public

void

seterror

(string error)

public object getresult()

public

void

setresult

(object result)

}

序列話將物件資料資訊轉換為用於儲存或傳輸的資訊,當伺服器收到序列化後的資訊會對其進行反序列化讀取。

kryo序列化

public

class

kryoserializer

extends

serializer

catch

(exception ex)

finally

catch

(ioexception e)

pool.

release

(kryo);}

}@override

public

object deserialize

(byte

bytes, class

clazz)

catch

(exception ex)

finally

catch

(ioexception e)

pool.

release

(kryo);}

}}

在協議格式和序列化方式確定前提下,還要用編碼器將請求物件轉化為便於傳輸的位元組流,而解碼器則將位元組流轉換為服務端應用能使用的格式。

編碼器rpcencoder

public

class

rpcencoder

extends

messagetobyteencoder

@override

public

void

encode

(channelhandlercontext ctx, object in, bytebuf out)

throws exception

catch

(exception ex)}}

}

解碼器

public

class

rpcdecoder

extends

bytetomessagedecoder

@override

public

final

void

decode

(channelhandlercontext ctx, bytebuf in, list

out)

throws exception

in.markreaderindex()

;int datalength = in.

readint()

;if(in.

readablebytes()

< datalength)

byte

data =

newbyte

[datalength]

; in.

readbytes

(data)

; object obj = null;

trycatch

(exception ex)

}}

RPC之Thrift框架基本介紹

rpc remote procedure call,遠端過程呼叫 是乙個計算機通訊協議,此協議允許程序間通訊。簡單來說,當機器 a 上的程序呼叫機器 b 上的程序時,a 上的呼叫程序被掛起,而 b 上的被呼叫程序開始執行。呼叫方可以通過引數將資訊傳送給被呼叫方,然後可以通過被呼叫方傳回的結果得到返回...

RPC 手寫乙個RPC框架

基於上一節的內容rpc 準備階段,自己實現乙個基本的rpc框架。public class rpcserverframereg 註冊服務,就是將介面和實現類儲存到上邊定義的serviceholder中,param serviceinte ce 介面 param impl 介面的實現類 throws i...

高效能非同步RPC框架 kiss rpc介紹和測試

1.輕量級,簡單易用。支援idl和手動編寫協議兩種方式。模擬函式式呼叫方式,更加符合rpc遠端呼叫邏輯,簡單,透明。易修改易使用,已有的 可以直接發布使用 資料格式支援向下相容 支援多值返回特性,支援超時機制,模擬grpc,thrift,dubbo快幾倍甚至 幾十倍。支援管道資料壓縮,動態資料壓縮,...