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 服务在调用时必须保持函数名和参数格式一致才能调用成功。


相关文章
|
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 协议进行远程传输。
|
安全 Dubbo 测试技术
软件测试|不会Python RPC,一篇文章教你入门
软件测试|不会Python RPC,一篇文章教你入门
软件测试|不会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
|
20天前
|
自然语言处理 负载均衡 API
gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
gRPC 是一种现代开源高性能远程过程调用(RPC)框架,支持多种编程语言,可在任何环境中运行。它通过高效的连接方式,支持负载平衡、跟踪、健康检查和身份验证,适用于微服务架构、移动设备和浏览器客户端连接后端服务等场景。gRPC 使用 Protocol Buffers 作为接口定义语言,支持四种服务方法:一元 RPC、服务器流式处理、客户端流式处理和双向流式处理。
|
3月前
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC