RPC說明:
a. RPC(Remote Procedure Call)遠程過程調(diào)用,簡單的理解是一個節(jié)點請求另一個節(jié)點提供的服務。
b. RPC 最核心要解決的問題就是在分布式系統(tǒng)間,如何執(zhí)行另外一個地址空間上的函數(shù)、方法,就仿佛在本地調(diào)用一樣。
c. TCP 協(xié)議是 RPC 的 基石,一般來說通信是建立在 TCP 協(xié)議之上的,而且 RPC 往往需要可靠的通信,因此不采用 UDP.。
1. 安裝
pip3 install zerorpc
2. 服務端
cat zerorpc_server.py
#!/usr/bin/env python3
# coding: utf-8
import time
import zerorpc
class caculate(object):
def hello(self, name):
return 'hello, {}'.format(name)
def add(self, x, y):
return x + y
def multiply(self, x, y):
return x * y
def subtract(self, x, y):
return abs(x-y)
def divide(self, x, y):
return x/y
class test1(object):
def print_msg(self, msg):
return msg
def format_print_msg(self, msg):
return "%s ---> %s" % (time.asctime(), msg)
class test2(object):
def display_timestamp(self):
return time.time()
class main(caculate,
test1,
test2):
def main(self):
return "main"
s = zerorpc.Server(main())
s.bind("tcp://0.0.0.0:4242")
print("run zerorpc...")
s.run()
3. 客戶端
cat zerorpc_client.py
#!/usr/bin/env python3
# coding: utf-8
import zerorpc
c = zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
def main():
result = c.add(2, 3)
print(result)
result = c.multiply(2, 3)
print(result)
result = c.subtract(2, 3)
print(result)
result = c.divide(2, 3)
print(result)
result = c.print_msg("hello world")
print(result)
result = c.format_print_msg("hello world")
print(result)
result = c.display_timestamp()
print(result)
if __name__ == '__main__':
main()
結(jié)果:
python3 zerorpc_client.py
5
6
1
0.6666666666666666
hello world
Wed Sep 16 17:20:08 2020 ---> hello world
1600248008.4201121