Python XML-RPC 实现简单的远程调用过程

简介: RPC 是 Remote Procedure Call 的缩写,翻译成中文为:远程方法调用。在 Python 中,我们可以使用 XML-RPC 协议创建自己的跨平台,独立于语言的服务器。XML Remote Procedure Call,即 XML 远程方法调用。XML-RPC 是一种远程过程调用方法,它使用通过 HTTP 传递的 XML 作为载体。 有了它,客户端可以在远程服务器上调用带参数的方法(服务器以 URI 命名)并获取结构化的数据。简单的理解是:将数据定义为 XML 格式,通过 HTTP 协议进行远程传输。

1 服务器

在 Python 中,xmlrpc 模块是一个集合了 XML-RPC 服务端与客户端实现模块的包。 这些模块是:


我们使用 SimpleXMLRPCServer 来创建 SimpleXMLRPCSERVER 实例,并告诉它以侦听传入请求。接下来,我们将某些功能定义为服务的一部分并注册这些功能,以便服务器知道如何调用它。


创建一个 xmlrpc_server.py 文件。下面的示例中,我们使用 SimpleXMLRPCServer 实例创建服务器,并注册一些预定义和自定义功能。最后,我们将服务器放入无限的循环接收和响应请求中。

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
class RequestHandler(SimpleXMLRPCRequestHandler):
   rpc_paths = ('/RPC2',)
with SimpleXMLRPCServer(('localhost', 9000), requestHandler=RequestHandler) as server:
    server.register_introspection_functions()
    # Register len() function;
    server.register_function(len)
    # Register a function under a different name
    @server.register_function(name='rmndr')
    def remainder_function(x, y):
        return x // y
    # Register a function under function.__name__.
    @server.register_function
    def modl(x, y):
        return x % y
    server.serve_forever()


XML-RPC 可以让我们很容易的构造一个简单的远程调用服务。你所需要做的仅仅是创建一个服务器实例, 通过它的方法 register_function() 来注册函数,然后使用方法 serve_forever() 启动它。


一旦启动了上述服务器,就可以通过客户端程序来调用,该程序可以参考函数并进行函数调用。


2 运行客户端

创建一个 xmlrpc_client.py 文件:

import xmlrpc.client
s = xmlrpc.client.ServerProxy('http://localhost:9000')
print(s.len("Yuzhou1su"))
print(s.rmndr(1024,128))
print(s.modl(7,3))
# Print list of available methods
print(s.system.listMethods())


在终端中能看到如下输出

$ python xmlrpc_client.py 
9
8
1
['len', 'modl', 'rmndr', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
  • 第一个结果:字符串 Yuzhou1su 长度为 9
  • 第二个结果:1024 除以 128 的整除结果为 8
  • 第三个结果:7 除以 3 的余数为 1
  • 最后一行:输出系统方法

总结


XML-RPC 的缺点:

  • 它的性能不高
  • 不支持其他数据格式的传输。以及 XML-RPC 会将所有的数据序列化为 XML 格式,因此就会比其他的方法要慢一些
  • 而且其不能安全防范恶意构建的数据。


XML-RPC 的优点:

  • 传输复杂的数据。
  • 通过程序语言的封装,实现远程对象的调用。


但是,这种简单的编码的优势在于许多其他的编程语言都能够理解。使用

XML-RPC 的话,客户端程序就可以采用 Python 之外的语言来编写,同样可以访问你

的服务。


抛开 XML-RPC 的局限性不说,如果需要以快速但并不完善(quick and dirty)的方式

实现一个远端过程调用系统,那么了解一下 XML-RPC 还是很值得的。很多时候简单

的方案就已经足够好了。另外,JSON-RPC 的原理与其类似。

相关文章
|
6月前
|
负载均衡 网络协议 小程序
SpringCloud远程调用为啥要采用HTTP,而不是RPC?
【8月更文挑战第28天】在微服务架构日益盛行的今天,SpringCloud凭借其强大的生态系统和灵活的集成能力,成为了众多企业构建微服务系统的首选框架。在微服务之间的远程调用中,一个常见的问题是选择HTTP还是RPC(远程过程调用)作为通信协议。本文将深入探讨SpringCloud为何更倾向于采用HTTP而非RPC进行远程调用。
455 5
|
3月前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
30 1
|
9月前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
183 1
|
4月前
|
存储 Python
Python:利用XML-RPC实现简单的远端过程调用
Python:利用XML-RPC实现简单的远端过程调用
22 1
|
5月前
|
XML 数据格式 Python
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
python 解析xml遇到xml.etree.ElementTree.ParseError: not well-formed (invalid token): |4-8
|
4月前
|
负载均衡 Java 开发者
Spring Cloud 远程调用:为何选择 HTTP 而非 RPC?
【10月更文挑战第1天】在微服务架构中,远程服务调用是一个核心环节。面对HTTP和RPC(Remote Procedure Call,远程过程调用)这两种通信协议,Spring Cloud 选择了HTTP作为其主要通信手段。本文将深入探讨Spring Cloud选择HTTP而非RPC的原因,以及这一选择在实际工作中的优势。
155 0
|
5月前
|
XML JavaScript API
30天拿下Python之使用xml
30天拿下Python之使用xml
34 0
|
6月前
|
编解码 负载均衡 监控
RPC远程调用
RPC远程调用
|
8月前
|
XML JavaScript 关系型数据库
Python XML 解析
Python XML 解析
|
7月前
|
XML 数据格式 Python
【Python】已解决:xml.parsers.expat.ExpatError: no element found: Line 1, column 0
【Python】已解决:xml.parsers.expat.ExpatError: no element found: Line 1, column 0
199 0

热门文章

最新文章