Python RPC | 连载 01 - RPC

简介: Python RPC | 连载 01 - RPC

一、RPC

RPC(远程过程调用) 既 Remote Procedure Call Protocol 的缩写,RPC 可以实现客户端像调用本地函数一样调用远程服务器的方法(服务)。

RPC 可以基于 TCP/UDP,也可以基于 HTTP 进行网络传输,那么 RPC 与 HTTP 接口有什么区别呢?

RPC 与 HTTP 接口在客户端使用方式不同

HTTP 接口只关注服务方,不关注客户端,只要客户端调用,返回数据即可,RPC 接口则要求客户端遵循服务端定义的服务的规则。

RPC 与 HTTP 接口面向的对象不同

RPC 的调用是面向方法的,而 HTTP 接口是面向资源的。

RPC 与 HTTP 接口的序列化协议不同

HTTP 接口通常使用的序列化协议是 JSON 或者 XML,而 RPC 接口使用的序列化协议则为 JSON-RPC 或者 XML-RPC。

RPC 的优势

HTTP 是无状态的,也就说建立连接获取到返回数据之后就会关闭连接,RPC 是可以保持长连接的。并且 RPC 基于 TCP 传输效率更高。

RPC 还可以基于 TCP 开发自定义的协议,自定义的协议可以优化数据的传输效率。

二、XML-RPC

XML-RPC 全称为 XML Remote Procedure Call,既 XML 远程过程调用,它是一套允许运行在不同的操作系统、不同环境的程序实现基于网络调用的规范和实现。

XML-RPC 使用 HTTP 作为传输协议,XML 作为传送信息的编码格式。XML-RPC 的定义尽可能的保持了简单,能够发送、处理和返回复杂的数据结构。

image.png

  • 客户端存根:存放服务端的地址消息,然后再将客户端的请求参数打包成网络消息,通过网络发送给服务端。
  • 服务端存根:接收客户端发过来的消息,将消息解包成具体的参数,再调用指定的本地方法。

xmlrpc

Python 中包含一个 xmlrpc 标准库,可以创建基于 XML 传输格式的 RPC 客户端和服务端。

首先创建一个 xmlrpc_server.py 文件,表示服务端。

from xmlrpc.server import SimpleXMLRPCServer
class Calculator:
    def add(self, x, y):
        return x + y
    def multiply(self, x, y):
        return x * y
    def subtract(self, x, y):
        return abs(x - y)
    def divide(self, x, y):
        return x / y
cal = Calculator()
xml_rpc_server = SimpleXMLRPCServer(("localhost", 8000))
xml_rpc_server.register_instance(instance=cal)
print("Listening on 8000")
xml_rpc_server.serve_forever()
复制代码

接着创建一个 xmlrpc_client.py 文件,代表客户端,在代码中对服务端提供的函数(服务)进行调用。

# Date: 2022/9/11
from xmlrpc import client
server = client.ServerProxy("http://localhost:8000")
print(server.multiply(5, 7))
复制代码

启动 xmlrpc_server.py,然后运行 xmlrpc_client.py 就可以输出结果 35

根据客户端的调用可以确定,RPC 服务不同于 HTTP 服务,RPC 服务时没有 URL 地址之类的,RPC 服务的调用必须使用指定的代理,而 HTTP 服务可以是不同的客户端进行调用。

RPC 服务强调的是调用效果,就像调用本地函数一样调用远程服务。RPC 服务在调用时必须保持函数名和参数格式一致才能调用成功。


相关文章
|
XML 安全 数据格式
Python XML-RPC 实现简单的远程调用过程
RPC 是 Remote Procedure Call 的缩写,翻译成中文为:远程方法调用。在 Python 中,我们可以使用 XML-RPC 协议创建自己的跨平台,独立于语言的服务器。XML Remote Procedure Call,即 XML 远程方法调用。XML-RPC 是一种远程过程调用方法,它使用通过 HTTP 传递的 XML 作为载体。 有了它,客户端可以在远程服务器上调用带参数的方法(服务器以 URI 命名)并获取结构化的数据。 简单的理解是:将数据定义为 XML 格式,通过 HTTP 协议进行远程传输。
|
安全 Dubbo 测试技术
软件测试|不会Python RPC,一篇文章教你入门
软件测试|不会Python RPC,一篇文章教你入门
92 0
软件测试|不会Python RPC,一篇文章教你入门
|
XML JSON Java
Python RPC | 连载 03 - JSONRPCServer
Python RPC | 连载 03 - JSONRPCServer
Python RPC | 连载 03 - JSONRPCServer
|
XML 数据格式 Python
Python RPC | 连载 02 - XMLRPCServer
Python RPC | 连载 02 - XMLRPCServer
Python RPC | 连载 02 - XMLRPCServer
|
16天前
|
存储 人工智能 数据处理
Python:编程的艺术与科学的完美交融
Python:编程的艺术与科学的完美交融
19 1
|
3天前
|
JSON 数据格式 开发者
pip和requests在Python编程中各自扮演着不同的角色
`pip`是Python的包管理器,用于安装、升级和管理PyPI上的包;`requests`是一个HTTP库,简化了HTTP通信,支持各种HTTP请求类型及数据交互。两者在Python环境中分别负责包管理和网络请求。
14 5
|
5天前
|
存储 Python 容器
Python高级编程
Python集合包括可变的set和不可变的frozenset,用于存储无序、不重复的哈希元素。创建集合可使用{}或set(),如`my_set = {1, 2, 3, 4, 5}`。通过add()添加元素,remove()或discard()删除元素,如`my_set.remove(3)`。