Python 库手册:xmlrpc.client 与 xmlrpc.server 模块

xmlrpc.client 和 xmlrpc.server 是 Python 标准库中用于构建基于 XML-RPC 协议的远程过程调用(RPC)通信模块。

xmlrpc.client 用于编写客户端程序,向远程服务器发起方法调用。

xmlrpc.server 用于编写服务器端,暴露本地方法供远程客户端调用。

XML-RPC 是一种基于 HTTP 和 XML 的远程调用协议,兼具跨语言、结构清晰、实现简单的特点,广泛用于轻量级 RPC 服务。

常见应用场景:

(1)构建跨语言远程调用接口(如 Python 调用 Java、PHP 服务)。

(2)快速构建基于 HTTP 的内部远程控制服务。

(3)教学实验场景下的 RPC 模拟。

(4)内网服务通信或嵌入式设备控制。

◆ ◆

核心概念

1、XML-RPC 协议

通过 HTTP 传输 XML 格式的远程方法调用请求和响应结果。

2、服务端注册函数

通过 register_function() 将本地函数暴露给远程访问。

3、客户端代理对象

通过 ServerProxy 实例自动将方法调用转为 XML-RPC 请求。

4、请求传参限制

仅支持基础数据类型(字符串、整数、浮点、布尔、列表、字典等)。

5、传输层协议

基于 HTTP,默认端口为 8000,可自由修改。

◆ ◆

应用举例

例 1:简单的 XML-RPC 服务端

python 复制代码
# server.pyfrom xmlrpc.server import SimpleXMLRPCServer
def add(x, y):    return x + y
server = SimpleXMLRPCServer(("localhost", 8000))server.register_function(add, "add")print("XML-RPC Server is running on http://localhost:8000")server.serve_forever()

例 2:对应的客户端调用

python 复制代码
# client.pyfrom xmlrpc.client import ServerProxy
proxy = ServerProxy("http://localhost:8000/")result = proxy.add(5, 7)print("Result from server:", result)

例 3:注册多个函数

python 复制代码
from xmlrpc.server import SimpleXMLRPCServer
server = SimpleXMLRPCServer(("localhost", 8000))
def subtract(x, y): return x - ydef multiply(x, y): return x * y
server.register_function(subtract, "subtract")server.register_function(multiply, "multiply")

例 4:注册实例对象(将方法作为服务暴露)

python 复制代码
from xmlrpc.server import SimpleXMLRPCServer
server = SimpleXMLRPCServer(("localhost", 8000))
class Math:    def divide(self, x, y):        return x / y
server.register_instance(Math())  # 自动注册对象中所有公有方法

例 5:处理客户端异常

python 复制代码
from xmlrpc.client import ServerProxy, Fault
proxy = ServerProxy("http://localhost:8000/")try:    print(proxy.divide(4, 0))except Fault as e:    print("RPC Fault:", e.faultString)

◆ ◆

常用函数速览

ServerProxy(url, ...)

创建远程服务代理对象。

参数:

url:服务器地址(如 "http://localhost:8000/")

allow_none:是否允许传递 None(默认 False)

use_datetime:是否将时间类型转换为 datetime 对象

返回:可调用远程方法的对象

SimpleXMLRPCServer(address)

创建一个简单的 XML-RPC 服务器。

参数:

address:一个元组 ("主机", 端口),如 ("localhost", 8000)

返回:XML-RPC 服务实例

register_function(func, name=None)

将函数注册为远程可调用方法。

参数:

func:本地函数对象

name:可选,方法名,默认使用函数名

返回:无

register_instance(obj)

将对象的方法全部注册为远程可调用方法。

参数:对象实例

返回:无

serve_forever()

启动服务器并监听客户端请求。

参数:无

返回:无

Fault

异常类。远程服务器出错时客户端抛出的异常。

属性:

faultCode:错误代码

faultString:错误说明

◆ ◆

补充说明

1、XML-RPC 仅支持基础数据类型,不能传递自定义对象或文件(推荐使用 base64 编码后传递)。

2、由于基于明文的 HTTP 协议传输,不具备加密机制,不建议在公网环境中暴露。

3、若需并发支持,请使用 ThreadingXMLRPCServer 替代 SimpleXMLRPCServer。

4、与 JSON-RPC 相比,XML-RPC 在语法上更冗长,但兼容性更强。

"点赞有美意,赞赏是鼓励"

相关推荐
喜欢喝果茶.11 分钟前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
亓才孓12 分钟前
[Class类的应用]反射的理解
开发语言·python
努力学编程呀(๑•ี_เ•ี๑)12 分钟前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
小镇敲码人21 分钟前
深入剖析华为CANN框架下的Ops-CV仓库:从入门到实战指南
c++·python·华为·cann
island131434 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
坚持就完事了38 分钟前
Java中的集合
java·开发语言
摘星编程41 分钟前
深入理解CANN ops-nn BatchNormalization算子:训练加速的关键技术
python
魔芋红茶42 分钟前
Python 项目版本控制
开发语言·python
lili-felicity1 小时前
CANN批处理优化技巧:从动态批处理到流水线并行
人工智能·python
一个有梦有戏的人1 小时前
Python3基础:进阶基础,筑牢编程底层能力
后端·python