Python RPC | 连载 02 - XMLRPCServer

简介: Python RPC | 连载 02 - XMLRPCServer

一、SimpleXMLRPCServer

Python RPC | 连载 01 - RPC 中我们已经搭建了一个简单的 RPC 的服务端和客户端,使用 SimpleXMLRPCServer 类的 register_instance 函数在服务端注册一个实例,该实例中包含了一个几个方法,所以我们就可以在客户端调用服务端注册的实例的方法。

除了 register_instance 函数之外,还有:

  • register_function(function[,name]):注册一个方法或者服务
  • register_introspection_functions():注册一个反函数
  • register_multical_functions():注册一个复合函数

使用 register_function 在服务端注册一个提供服务的函数

# filename sever_alpha.py
from xmlrpc.server import SimpleXMLRPCServer
def respone_str():
    return "使用 register_function 注册的服务"
server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(respone_str)
server.serve_forever()
复制代码

在客户端调用这个函数

# filename client_alpha.py
from xmlrpc import client
server = client.ServerProxy("http://0.0.0.0:8000")
print(server.respone_str())
复制代码

启动服务端并运行客户端的调用,输出结果如下:

使用 register_function 注册的服务
复制代码

说明使用 register_function 函数注册的函数可以提供服务。

在服务端注册服务。

from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler
# 使用 register_introspection_functions 注册 反函数
class RequestHandler(SimpleXMLRPCRequestHandler):
    rpc_paths = ('/RPC2',)
server = SimpleXMLRPCServer(("localhost", 8000), requestHandler=RequestHandler)
print("Listen on 8000")
server.register_introspection_functions()
# 注册 pow,幂运算,实际调用的是已有的算数pow()
server.register_function(pow)
# 注册自定义的 add 函数
def add(x, y):
    return x + y
server.register_function(add, 'add')
# 注册 fun 实例
class Fun:
    def div(self, x, y):
        return x // y
fun = Fun()
server.register_instance(fun)
server.serve_forever()
复制代码

客户端代码,分别调用服务端注册的几个服务。

from xmlrpc import client
s = client.ServerProxy('http://localhost:8000')
print(s.pow(3,5))
print(s.add(3,9))
print(s.div(7,3))
print(s.system.listMethods())
复制代码

启动服务端并运行客户端代码,输出结果如下:

243
12
2
['add', 'div', 'pow', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
复制代码

二、ServerProxy

在客户端代码中通过 ServerProxy 的实例化对象来调用远程服务的函数。

image.png

ServerProxy 的初始化函数中包含了如下几个参数:

  • uri,即服务端的 url 地址
  • transport 传输实例,可选,https urls/http
  • encoding 编码格式
  • verbose 是 debug 模式
  • allow_none 是否请求空,若为 True,那么常量 none 将被翻译成 xml,默认如果是 none 则抛出异常 TypeError
  • use_datetime 可以使用 date/time, values 记录调用时间 datetime.datetime,默认是 false

ServerProxy 对象提供一些默认的方法:

  • ServerProxy.system.listMethods():返回远端服务器方法列表
  • ServerProxy.system.methodSignature(name):方法签名,是一个数组类型
  • ServerProxy.system.methodHelp(name):方法帮助信息


相关文章
|
1月前
|
存储 Python
Python:利用XML-RPC实现简单的远端过程调用
Python:利用XML-RPC实现简单的远端过程调用
|
XML 安全 数据格式
Python XML-RPC 实现简单的远程调用过程
RPC 是 Remote Procedure Call 的缩写,翻译成中文为:远程方法调用。在 Python 中,我们可以使用 XML-RPC 协议创建自己的跨平台,独立于语言的服务器。XML Remote Procedure Call,即 XML 远程方法调用。XML-RPC 是一种远程过程调用方法,它使用通过 HTTP 传递的 XML 作为载体。 有了它,客户端可以在远程服务器上调用带参数的方法(服务器以 URI 命名)并获取结构化的数据。 简单的理解是:将数据定义为 XML 格式,通过 HTTP 协议进行远程传输。
|
XML JSON 网络协议
Python RPC | 连载 01 - RPC
Python RPC | 连载 01 - RPC
Python RPC | 连载 01 - RPC
|
安全 Dubbo 测试技术
软件测试|不会Python RPC,一篇文章教你入门
软件测试|不会Python RPC,一篇文章教你入门
软件测试|不会Python RPC,一篇文章教你入门
|
XML JSON Java
Python RPC | 连载 03 - JSONRPCServer
Python RPC | 连载 03 - JSONRPCServer
Python RPC | 连载 03 - JSONRPCServer
|
7天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
7天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
下一篇
无影云桌面