Python RPC 不会?不妨看看这篇文章

  发布时间:2025-11-05 12:42:09   作者:玩站小弟   我要评论
本文转载自微信公众号「AirPython」,作者星安果。转载本文请联系AirPython公众号。1. 前言大家好,我是安果!RPC,全程为 Remote Procedure Call,是一种进程间的通 。

本文转载自微信公众号「AirPython」,看篇作者星安果。文章转载本文请联系AirPython公众号。看篇

1. 前言

大家好,文章我是看篇安果!

RPC,全程为 Remote Procedure Call,文章是看篇一种进程间的通信方式,它采用「 服务端 / 客户机 」模式,文章是看篇一种请求响应模型

其中,服务端负责提供服务程序、文章响应请求做具体的看篇实现逻辑,客户机负责请求调用

主流的文章 RPC 框架包含:

阿里的 Dubbo Facebook 的 Thrift Google 的 gRpc 新浪微博的 Motan Golang 生态的 rpcx

其中,gRpc 和 Thrift 是看篇跨语言的 RPC 服务框架,并且 Thrift 相比性能更高

本篇文章以 Thrift 为例,文章聊聊 Python 中使用 RPC 的看篇流程

2. thriftpy2 介绍

Thrift 是一种接口描述语言和二进制通讯协议,服务器租用它可以被用来定义和创建跨语言的服务,使得不同语言的客户端、服务器之间能进行高效透明的通信

thriftpy2 是在 Thrift 的基础上进行二次封装,使用它编写 RPC 更加方便快捷

项目地址:https://github.com/Thriftpy/thriftpy2

首先,我们在虚拟环境下安装依赖包

# 安装依赖 pip3 install thriftpy2 

然后,如果是 Windows,建议在 Pycharm 中安装 thrift 插件

PS:该插件可以方便我们编写 Thrift 通讯文件

下载地址:https://plugins.jetbrains.com/plugin/7331-thrift-support

3. 实战一下

首先,根据需求编写 Thrift 通讯文件

比如,该文件定义 2 个方法

无参函数 ping 登录 login

包含两个参数:username、password

# foo.thrift service PingPong{     string ping(),     string login(         1: string username,         2: string password     ) } 

然后,编写服务端代码

根据 Thrift 通讯文件中定义的方法,编写具体的实现逻辑

创建一个服务对象,指定绑定的 ip 地址及端口号,开启服务并监听消息

# rcp_server.py import thriftpy2 from thriftpy2.rpc import make_server # 读取通信配置文件 pingpong_thrift = thriftpy2.load("foo.thrift", module_name="pingpong_thrift") class Dispatcher(object):     """根据通信配置文件定义的方法,重写实现方法"""     def ping(self):         """         Ping一下         :return:         """         return "pong"     def login(self, username, password):         """         登录         :param username: 用户名         :param password: 密码         :return:         """         print(获取客户端传过来的参数,用户名:,username,",密码:",password)         return 登录成功! # 创建服务,指定本地ip地址及监听端口号 server = make_server(pingpong_thrift.PingPong, Dispatcher(), 192.168.40.217, 9000) # 开启服务并监听 server.serve() 

接着,香港云服务器编写客户端代码

这里,根据服务端提供的 ip 地址、端口号,创建客户端连接对象,调用通信文件中定义好的方法

PS:如果客户端在远程执行,需要将 Thrift 通讯文件放置到同级目录下执行

# rcp_client.py import thriftpy2 from thriftpy2.rpc import make_client # 读取通信配置文件 pingpong_thrift = thriftpy2.load("foo.thrift", module_name="pingpong_thrift") # 创建客户端 client = make_client(pingpong_thrift.PingPong, 192.168.40.217, 9000) # 调用通信文件中定义好的方法(实际调用服务端的方法) print(client.ping()) print(client.login(root, pwd)) 

最后,分别运行服务端和客户端的代码

使用 WireShark 进行抓包分析,能发现服务端和客户端通讯的方式及数据传输过程

4. 最后

企业项目中,常用的 HTTP 的特点是简单、开发方便,上手简单、是主流的数据传输协议

相比 HTTP 或 H2,RPC 的主要优势体现在安全高、性能消耗低、传输效率高、服务治理方便上,所以我们可以根据实际项目需求选择合理的高防服务器数据通信方式

  • Tag:

相关文章

  • 笔记本外置显卡的性能及应用分析

    摘要:随着科技的进步和用户对图像处理性能的需求增加,笔记本电脑的图形处理能力逐渐成为用户关注的焦点。为了满足用户对高性能图形处理的需求,外置显卡应运而生。本文将深入分析外置显卡的性能及应...
    2025-11-05
  • 详细的多维度测评,看看哪个 Python 版本速度最快!

    哪个版本的 Python 最快?当然,这些问题由多种因素决定,其中的主要的因素是什么呢?我们又如何为自己的应用寻找最快的 Python 版本呢?带着这些问题,Hackermoon 上一位叫Anthon
    2025-11-05
  • JavaScript框架对比及案例(React、Vue 及 Hyperapp)

    在我的上一篇文章中,我试图解释为什么我认为 Hyperapp 是一个 React 或 Vue 的可用替代品,原因是,我发现它易于起步。许多人批评这篇文章,认为它自以为是,并没有给其它框架一个展示自己的
    2025-11-05
  • Java中的基本数据类型转换(自动、强制、提升)

    说基本数据类型转换之前,先了解下 Java 中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围,如下图所示。重新温故了下原始数据类型,现在来解释下它们之间的转换关系。自动类型转换自动类型
    2025-11-05
  • 电脑耳机效果调试教程(让你的音乐体验更上一层楼)

    摘要:在现代社会中,人们越来越重视音乐的享受。而耳机作为一种常见的音乐设备,其效果调试对于提升音乐体验至关重要。本文将为你介绍一些简单易懂的电脑耳机效果调试方法,让你的音乐体验更上一层楼...
    2025-11-05
  • 90%的 Java 程序员被误导的一个性能优化策略!

    我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义。接触 Java 这么久以来,相信很多 Java 程序员都被这种代码性能优化策
    2025-11-05

最新评论