thrift&thriftpy

简介

The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.

Thrift

  1. 你通过Thrift脚本文件生成的代码
  2. 图中褐色部分是你根据生成代码构建的客户端和服务器的代码
  3. 红色的部分是两端产生的技术结果。

协议

Thrift可以让你选择客户端与服务器之间的传输通信协议的类别,在传输协议上总体上划分为文本(text)和二进制(binary)传输协议,为节省带宽,提供传输效率,一般情况下使用二进制类型的传输协议为多数,但有时候还是会使用基于文本类型的协议,这些需要根据项目/产品中的实际需求:

  1. TBinaryProtocol: 二进制编码格式进行数据传输
  2. TCompactProtocol: 这种协议非常有效,使用Variable-Length Quantity(VLQ)编码对书籍进行压缩。
  3. TJSONProtocol: 使用JSON的数据编码进行数据传输。
  4. TSimpleJSONProtocol: 这种协议只提供JSON只写的协议,适用于通过脚本语言解析。
  5. TDebugProtocol: 在开发的过程中帮助开发人员调试使用,以文本的形式展现方便阅读。

传输层

  1. TSocket: 使用阻塞式I/O进行传输,也是最常见的模式
  2. TFramedTransport: 使用非阻塞方式,按块的大小进行传输,类似于Java中的NIO。
  3. TFileTransport: 顾名思义按照文件的方式进行传输,虽然这种方式不提供Java的实现,但是实现起来非常简单。
  4. TmemoryTransport: 使用内存I/O,就好比Java中的ByteArrayOuputStream实现。
  5. TZibTransport: 使用只写zlib压缩,不提供Java的实现。

服务端类型

  1. TSimpleServer: 单线程服务器端使用的标准的阻塞式I/O
  2. TThreadPoolServer: 多线程服务器端使用标准的阻塞式I/O。
  3. TNonblockingServer: 多线程服务器端使用的非阻塞式I/O,并实现了Java中的NIO通道。

gunicorn_thrift

实际使用

1
2
3
4
5
/srv/tls/venv/bin/gunicorn_thrift tls.gateway.thrift:app -k thriftpy_gevent -b %(ENV_LAN_IP)s:8088 --thrift-protocol-factory thriftpy.protocol:TCyBinaryProtocolFactory --thrift-transport-factory thriftpy.transport:TCyBufferedTransportFactory -w 1

thriftpy.protocol:TCyBinaryProtocolFactory

thriftpy.transport:TCyBufferedTransportFactory

相关链接

https://thrift.apache.org/

https://thrift.apache.org/tutorial/py

坚持原创技术分享,您的支持将鼓励我继续创作!