所謂RPC,是遠端過程調用(Remote Procedure Call)的簡寫,網上解釋很多,簡單來說,就是在目前程序調用其他程序的函數時,體驗就像是調用本地寫的函數一般。
本文實作的是在本地調用遠端的類class對象的接口,也就是本地的client不執行個體化類對象,調用的是server端的類對象接口。
為了達到讓調用層無須關心底層實作,擁有絲滑般的體驗,就需要以下幾個部分:
用戶端需要把類的接口提取出來,并将調用函數事件捕獲存儲起來;服務端需要把類的公有函數作為可遠端調用的接口。
用戶端把調用函數的事件(調用的函數,參數)進行序列化并發送給服務端;服務端将用戶端的調用事件反序列化,并執行相應的接口,将傳回值發送給用戶端。
用戶端與服務端通過某種方式(一般就是網絡socket)進行通信。
1 .安裝 thriftpy2
pip3 install thriftpy2
2.服務端 server.pys
import thriftpy2
from thriftpy2.rpc import make_server
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")
class Dispatcher(object):
def ping(self):
return "pong"
server = make_server(pingpong_thrift.PingPong,Dispatcher(),"127.0.0.1",6000)
server.serve()
3.pingpong.thrit
service PingPong{
string ping(),
}
4.client.py
import thriftpy2
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")
from thriftpy2.rpc import make_client
client = make_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
print(client.ping())
啟動server.py,運作client.py後即可檢視到服務端函數的結果。