🚀🚀🚀本篇主要内容
客户端
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的接口定义语言
* 协议与传输的选择
* 服务端编写
* 客户端编写
* gRPC是由Google公司开源的高性能RPC框架。
* gRPC支持多语言
gRPC原生使用C、Java、Go进行了三种实现,而C语言实现的版本进行封装后又支持C++、C
* gRPC支持多平台
支持的平台包括:Linux、Android、iOS、MacOS、Windows
* gRPC的消息协议使用Google自家开源的Protocol Buffers协议机制(proto3)
* gRPC的传输使用HTTP/2标准,支持双向流和连接多路复用

* 简介
* HTTP/2协议
* gRPC的接口类型
* Protocol Buffers
* 服务器与客户端案例编写
gRPC的传输是基于HTTP/2标准协议实现的, 前面提到gRPC支持双向流和多路复用,实际就是HTTP/2的特性。而且gRPC有四种接口类型,也是依赖HTTP/2协议建立起来的,所以 有必要先来了解一下HTTP/2协议。
HTTP/2 是HTTP协议的最新版本, 通过HTTP/1.x与HTTP/2的对比来认识HTTP/2的特性。
HTTP/1.x 可以说是一个文本协议,可读性很好,但是效率不高。
![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/40d1e061ca794d508b3146bce5129bbd~tplv-k3u1fbpfcp-watermark.image
如果要解析一个完整的 HTTP 请求,首先 需要能正确的读出 HTTP header。HTTP header 各个 fields 使用 \r\n 分隔,然后跟 body 之间使用 \r\n\r\n 分隔。解析完 header 之后, 才能从 header 里面的 content-length 拿到 body 的 size,从而读取 body。
这套流程其实并不高效,因为 需要读取多次,才能将一个完整的 HTTP 请求给解析出来,虽然在代码实现上面,有很多优化方式,譬如:
* 一次将一大块数据读取到 buffer 里面避免多次 IO read
* 读取的时候直接