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 服务端

# 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:对应的客户端调用

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

例 3:注册多个函数

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:注册实例对象(将方法作为服务暴露)

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

例 5:处理客户端异常

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 在语法上更冗长,但兼容性更强。

图片

“点赞有美意,赞赏是鼓励”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93364.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

渲染篇(一):从零实现一个“微型React”:Virtual DOM的真面目

渲染篇(一):从零实现一个“微型React”:Virtual DOM的真面目 引子:前端性能的“永恒之问” 在前面两章中,我们已经奠定了坚实的架构基础。我们用“任务调度器”建立了声明式和模块化的编程范式,并通过对比MVC等模式论…

SWC 深入全面讲解

一、核心功能与原理 1. 高性能编译 Rust 架构优势:SWC 基于 Rust 编写,利用 Rust 的性能和并发性优势,编译速度比 Babel 快约 20 倍,比 TypeScript 编译器更快。并行编译:支持多线程并行处理,在四核基准测试…

XML Expat Parser:深入解析与高效应用

XML Expat Parser:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种广泛使用的标记语言,在数据交换、存储和表示中扮演着重要角色。XML Expat Parser 是一个高性能、可扩展的XML解析库,广泛应用于各种编程语言中。本文将深入探讨XML Expat Parser 的原理、特性以及…

【Python】自动化GIT提交

在日常开发中,我们经常需要频繁地向 Git 仓库提交代码。虽然 git add、git commit、git push 这几个命令并不复杂,但重复操作容易出错,也浪费时间。本文将介绍如何使用 Python 脚本自动化完成 Git 提交流程,让开发更高效&#xff…

基于Qlearning强化学习的水下无人航行器路径规划与避障系统matlab性能仿真

目录 1.引言 2.算法仿真效果演示 3.数据集格式或算法参数简介 4.算法涉及理论知识概要 5.参考文献 6.完整算法代码文件获得 1.引言 水下无人航行器 (Autonomous Underwater Vehicle, AUV) 的路径规划与避障是海洋探索、资源开发和军事应用中的关键技术。传统的路径规划方…

模块自由拼装!Python重构DSSAT作物模块教程(以杂交水稻为例)

基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。Decision Support Systems for Agrotechnology Tr…

Java项目接口权限校验的灵活实现

引言 在Java Web开发中,接口权限校验是保护系统资源安全的关键机制。本文将介绍一种灵活、可配置的接口权限校验方案,通过注解驱动和拦截器实现,既能保证安全性,又能灵活控制哪些接口需要校验。 设计思路 实现方案的核心设计要点&…

瀚高DB兼容MySQL if函数

文章目录环境症状问题原因解决方案环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:4.5 症状 MySQL if函数在瀚高DB当中没有,源应用在用到if函数时,就会报if函数不存在的错误信息。为此,我们需要根据业…

基于深度学习的胸部 X 光图像肺炎分类系统(六)

目录 结果指标解读 一、为什么选择这些指标? 二、各指标的定义和解读 1. 准确率(Accuracy) 2. 损失(Loss) 3. 精确率(Precision) 4. 召回率(Recall) 三、这些指标…

区块链性能优化策略:从理论到实践

目录 区块链性能优化策略:从理论到实践 1. 引言:区块链性能的挑战 2. 性能评估指标 2.1 核心性能指标 2.2 性能瓶颈分析 3. 分层优化策略 3.1 网络层优化 3.1.1 Gossip协议改进 3.1.2 网络分片 3.2 共识层优化 3.2.1 PBFT优化 3.3 数据层优化 3.3.1 状态树优化 3.3.2 区块数据…

【VLLM】open-webui部署模型全流程

目录 前言 一、租用服务器到服务器连接VScode全流程(可选) 二、下载模型到本地服务器 2.1 进入魔塔社区官网 2.2 选择下载模型 2.3 执行下载 三、部署VLLM 3.1 参考vllm官网文档 3.2 查看硬件要求 3.3 安装vLLM框架 3.4 启动模型服务 方法1:直接启动下载的本地模…

办公自动化入门:如何高效将图片整合为PDF文档

将多张图片合并到一个PDF文件中可以帮助保持特定的顺序和布局,同时确保图像的质量不会因为格式转换而下降。它是免费,不限次数,批量导入也毫无压力。操作堪比发朋友圈:拖图进来 → 选个纸张尺寸 → 点击转换 → 指定保存路径&…

使用宝塔面板搭建 PHP 环境开发一个简单的 PHP 例子

目录一、引言二、准备工作2.1 服务器选择2.2 下载安装宝塔面板三、使用宝塔面板搭建 PHP 环境3.1 登录宝塔面板3.2 选择 Web Server3.3 安装 PHP3.4 安装 MySQL 数据库四、开发一个简单的 PHP 例子4.1 创建 PHP 文件4.2 编写 PHP 代码4.3 设置站点4.4 访问 PHP 页面五、常见问题…

AWS WebRTC:我们的业务模式

拉流、卡录基本流程 设备端(摄像机) 与 App端 是通过 AWS KVS WebRTC 信令服务进行“点对点连接”的,真正的媒体数据(音视频)是通过 WebRTC 的 ICE 通道(P2P 或 TURN)直接传输的,而不…

使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色

使用Python,OpenCV,K-Means聚类查找图像中最主要的颜色 分别把跑图聚类选取1, 2, 3,4, 5, 6, 7,8, 9种主要颜色并绘制colormap颜色图; 效果图 分别把跑图聚类选取3,4, 5,7,9种主要颜色并绘制…

DBAPI 实现分页查询的两种方法

DBAPI 实现分页查询的两种方法 背景 在进行分页查询时,用户通常需要传入当前页码 pageNo 和每页显示的条数 pageSize 参数。根据这两个参数,我们可以从数据库中查询出当前页的数据。以 MySQL 为例,分页查询的 SQL 语句如下: se…

第五天上课 SSLPolicy策略和Network Discovery技术

SSL Policy场景1:拥有自家服务器的私钥,解密访问自家服务器的ssl流量场景2: 内部用户访问互联网的ssl流量,需要解密并重签名Correlation and Compliance相关性与合规性配置相关性与合规性策略,在10.1.1.0/24网络中,当通过Network …

进阶07:C#与通用OPC UA通信范例

本节目标: 1)安装软件,搭建虚拟OPC UA服务器; 2)使用UaExpert,读取OPC UA服务器中的变量; 3)编写Winform程序,读写服务器中变量值,创建订阅触发事件&#…

大模型微调学习笔记(基于讯飞星辰MaaS速学版)

文章目录参考资料说明大模型微调入门微调简介微调步骤数据准备模型选择训练方式效果评估模型部署大模型微调(基于讯飞星辰Maas)构建数据集方法1:预置数据集方法2:创建数据集数据辅助工具数据集划分模型微调数据配置参数配置模型部…

[CSS]让overflow不用按shift可以滚轮水平滚动(纯CSS)

前言 我不爽前端无法直接滚轮横向滚动很久了 明明浏览器可以直接判断 x滚动且y不滚动的时候滚轮事件可以直接操作横向滚动 这个是我探究出来的方法,尤其适合这种很多很多小tag的情况解析 原理是将竖向排列的overflow旋转成横向,实际操作的还是竖向overflow.继而实现鼠标滚轮不用…