本教程使用XML-RPC介绍python中RPC的使用
XML-RPC是一种基于XML的远程过程调用协议,允许不同的程序在网络上进行通信。Python标准库中包含了对XML-RPC的支持,使得使用起来非常方便。
XML-RPC在网络上传输的数据都是以XML格式进行编码和解码的,所以它相对来说不太高效,而且不适合传输大量的数据。
那我为什么要用XML-RPC呢,因为经理说尽量减少第三方包。我一个实习生也只好尽量听话。而XML-RPC是python的标准库,直接引用即可。
还有一个原因就是,项目要求只是通过RPC简单调用另外一个容器中服务的方法,对性能要求不高。所以XML-RPC无疑是最好的选择。
官方教程:https://docs.python.org/zh-cn/3.10/library/xmlrpc.server.html
以下是如何在Python中使用XML-RPC的详尽说明:
1. 创建XML-RPC服务器端
你可以使用xmlrpc.server
模块创建一个XML-RPC服务器。首先,定义服务器端的方法:
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
# 指定路径,默认为 /
class RequestHandler(SimpleXMLRPCRequestHandler):
rpc_paths = ('/RPC2',)
# 创建RPC服务
with SimpleXMLRPCServer(('localhost', 6666),requestHandler=RequestHandler) as server:
server.register_introspection_functions()
# 注册函数,调用时使用函数名即可
server.register_function(pow)
def adder_function(x, y):
return x + y
# 注册函数,并设置别名,调用时使用别名
server.register_function(adder_function, 'add')
class MyFuncs:
def mul(self, x, y):
return x * y
# 注册类实例,实例的所有方法将被注册到RPC方法中
server.register_instance(MyFuncs())
# 运行服务器
server.serve_forever()
运行以上代码,你的XML-RPC服务器就会在本地的8000端口上启动并监听。
2. 创建XML-RPC客户端
接下来,我们创建一个XML-RPC客户端来调用服务器端提供的方法:
import xmlrpc.client
s = xmlrpc.client.ServerProxy('http://localhost:8000/RPC2')
print(s.pow(2,3)) # Returns 2**3 = 8
print(s.add(2,3)) # Returns 5
print(s.mul(5,2)) # Returns 5*2 = 10
# 打印RPC方法列表
print(s.system.listMethods())
运行以上客户端代码,你将会看到从服务器端获取的结果。
注意事项
确保服务器和客户端在同一个网络上可访问。
在实际应用中,你可能需要在服务器端实现更多的方法,并在客户端调用它们。
其他文章
docker容器间调用RPC服务遇到一个坑。看我下一篇文章关于docker容器,Connection refused
关于RPC,看我下下篇文章,什么是RPC协议?