Python之RPC开发讲解第11篇:客户端,Thrift

举报
程序员一诺python 发表于 2025/10/10 07:27:14 2025/10/10
【摘要】 客户端 安装 1 安装依赖工具和库 2 安装Thrift编译器和程序库 Thrift的接口定义语言IDL 1 基本类型 2 容器类型 协议与传输选择 1 协议 服务器 Thrift 简介 架构 使用方法 gRPC HTTP/2 1 HTTP/1.x gRPC接口类型 1 Unary RPC 2 Server Streaming RPC Protocol Buffers 1 文档

🚀🚀🚀本篇主要内容

客户端

[structlog 文档]

[colorama 文档]

import sys
sys.path.append('gen-py')

from calculate import Calculate
from base.ttypes import InvalidOperation, Operation, Work

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TCompactProtocol


def main():
    transport = TSocket.TSocket('127.0.0.1', 8888)

    # 使用缓存传输
    transport = TTransport.TBufferedTransport(

# Thrift




* Thrift简介
* Thrift的使用方法和组成结构
* 安装
* Thrift的接口定义语言
* 协议与传输的选择
* 服务端编写
* 客户端编写  


# 简介




* gRPC是由Google公司开源的高性能RPC框架

* gRPC支持多语言

gRPC原生使用CJavaGo进行了三种实现而C语言实现的版本进行封装后又支持C++C#、Node、ObjC、 Python、Ruby、PHP等开发语言

* gRPC支持多平台

支持的平台包括LinuxAndroidiOSMacOSWindows

* gRPC的消息协议使用Google自家开源的Protocol Buffers协议机制proto3

* gRPC的传输使用HTTP/2标准支持双向流和连接多路复用


![](https://fileserver.developer.huaweicloud.com/FileServer/getFile/communitytemp/20251009/community/383/461/571/0001696944383461571.20251009232708.37072131597035696602396791023957:20251010002709:2415:509CEEB8F0A13BC42CB85E57BCB9D55F8C47377B0FAA3CF8C32131DE886C4607.png)




## 架构




C语言实现的gRPC支持多语言其架构如下

*图片无法加载*




## 使用方法





# gRPC




* 简介

* HTTP/2协议

* gRPC的接口类型

* Protocol Buffers

* 服务器与客户端案例编写  


# HTTP/2




gRPC的传输是基于HTTP/2标准协议实现的 前面提到gRPC支持双向流和多路复用实际就是HTTP/2的特性而且gRPC有四种接口类型也是依赖HTTP/2协议建立起来的所以 有必要先来了解一下HTTP/2协议

HTTP/2 是HTTP协议的最新版本 通过HTTP/1.x与HTTP/2的对比来认识HTTP/2的特性





## 1 HTTP/1.x




HTTP/1.x 可以说是一个文本协议可读性很好但是效率不高

![](https://fileserver.developer.huaweicloud.com/FileServer/getFile/communitytemp/20251009/community/383/461/571/0001696944383461571.20251009232711.10719599502000570890823828735579:20251010002711:2415:4114F862DCBE0792192C4CD14D286B5A711304B87FCACFF376A5490917DC596E.png)




#### 解析




如果要解析一个完整的 HTTP 请求首先 需要能正确的读出 HTTP headerHTTP header 各个 fields 使用 \r\n 分隔然后跟 body 之间使用 \r\n\r\n 分隔解析完 header 之后 才能从 header 里面的 content-length 拿到 body  size从而读取 body

这套流程其实并不高效因为 需要读取多次才能将一个完整的 HTTP 请求给解析出来虽然在代码实现上面有很多优化方式譬如

* 一次将一大块数据读取到 buffer 里面避免多次 IO read
* 读取的时候直接
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。