python使用RPC

2024-06-01

本教程使用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())

运行以上客户端代码,你将会看到从服务器端获取的结果。

注意事项

  • 确保服务器和客户端在同一个网络上可访问。

  • 在实际应用中,你可能需要在服务器端实现更多的方法,并在客户端调用它们。

其他文章

  1. docker容器间调用RPC服务遇到一个坑。看我下一篇文章关于docker容器,Connection refused

  2. 关于RPC,看我下下篇文章,什么是RPC协议?

PREV
关于docker容器,Connection refused
NEXT
django序列化器(持续更新)