天天看點

python rpc 的實作

         所謂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後即可檢視到服務端函數的結果。