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

52 阅读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原生使用C、Java、Go进行了三种实现,而C语言实现的版本进行封装后又支持C++、C#、Node、ObjC、 Python、Ruby、PHP等开发语言

* gRPC支持多平台

支持的平台包括:Linux、Android、iOS、MacOS、Windows

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

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


![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6712a859f125473b9c8eb544212118b2~tplv-k3u1fbpfcp-watermark.image#?w=1404&h=904&s=124343&e=png&b=414624)


  
  
## 架构
  
  


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://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/40d1e061ca794d508b3146bce5129bbd~tplv-k3u1fbpfcp-watermark.image#?w=702&h=428&s=47860&e=png&b=414624)


  
  
#### 解析
  
  


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

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

* 一次将一大块数据读取到 buffer 里面避免多次 IO read
* 读取的时候直接