一、介紹
所謂RPC,是遠程過程調用(Remote Procedure Call)的簡寫,網上解釋很多,簡單來說,就是在當前進程調用其他進程的函數時,體驗就像是調用本地寫的函數一般。
本文實現的是在本地調用遠端的類class對象的接口,也就是本地的client不實例化類對象,調用的是server端的類對象接口。
為了達到讓調用層無須關心底層實現,擁有絲滑般的體驗,就需要以下幾個部分:
1客戶端需要把類的接口提取出來,並將調用函數事件捕獲存儲起來;服務端需要把類的公有函數作為可遠程調用的接口。
2客戶端把調用函數的事件(調用的函數,參數)進行序列化並發送給服務端;服務端將客戶端的調用事件反序列化,並執行相應的接口,將返回值發送給客戶端。
3客戶端與服務端通過某種方式(一般就是網絡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后即可查看到服務端函數的結果。
