from xmlrpc.server import SimpleXMLRPCServer # python中类的命名方式遵循驼峰命名法 # 1. 没有出现url的映射 # 2. 没有出现编码和解码 # 3. 序列化和反序列化协议是:xml class Calculate: 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 obj = Calculate() server = SimpleXMLRPCServer(("localhost", 8088)) # 将实例注册给rpc server server.register_instance(obj) print("Listening on port 8088") server.serve_forever()
rpc服务通俗来讲:通过一定协议和方法使得调用远程计算机上的服务,就像调用本地服务一样。
from xmlrpc import client # xmlrpc挺好用的 # rpc强调的是本地调用效果 # rpc在内部调用很多 server = client.ServerProxy("http://localhost:8088") print(server.divide(2, 3))
安装
pip install jsonrpclib
json_rpc_server.py
from jsonrpclib.SimpleJSONRPCServer import SimpleJSONRPCServer def my_dict(d): d["gender"] = "男" return d # 实例化server server = SimpleJSONRPCServer(("127.0.0.1", 8883)) # 将函数注册到server中 server.register_function(pow) server.register_function(lambda x, y: x + y, "add") server.register_function(my_dict) # 启动server server.serve_forever()
import jsonrpclib server = jsonrpclib.Server("http://127.0.0.1:8883") print(server.add(11, 22)) # 33 print(server.pow(5, 3)) # 125 ret = server.my_dict(dict(name="马亚南", age=18)) print(ret, type(ret))
总结:
更加高效和更加全面的技术 - zerorpc
import zerorpc class HelloRPC(object): def hello(self, name): return f"hello {name}" def add(self, x, y): return x + y # 1. 实例化一个server # 2. 绑定我们的业务代码到server中 server = zerorpc.Server(HelloRPC()) # 3. 设置协议、ip、端口 server.bind("tcp://0.0.0.0:8842") # 3. 启动server server.run()
import zerorpc # 在功能体验上,client端没有太大的差异 c = zerorpc.Client() c.connect("tcp://127.0.0.1:8842") print(c.hello("马亚南")) print(c.add(11, 22))
import zerorpc class StreamingRPC(object): @zerorpc.stream # @zerorpc.stream这里的装饰器是必须的,否则会有异常,如TypeError:cant't serialize def streaming_range(self, fr, to, step): return range(fr, to, step) s = zerorpc.Server(StreamingRPC()) s.bind("tcp://0.0.0.0:4242") s.run()
import zerorpc c = zerorpc.Client() c.connect("tcp://127.0.0.1:4242") for item in c.streaming_range(10, 20, 2): print(item)