thrift学习
概念
http://thrift.apache.org/docs/concepts
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。+-------------------------------------------+ | Server | | (single-threaded, event-driven etc) | +-------------------------------------------+ | Processor | | (compiler generated) | +-------------------------------------------+ | Protocol | | (JSON, compact etc) | +-------------------------------------------+ | Transport | | (raw TCP, HTTP etc) | +-------------------------------------------+
Thrift是FaceBOOK在2009年开源的序列化/RPC框架,主要包括四个组件:protocol,transport, processor和server,
其中protocol定义消息序列化方式,
transport定义客户端和服务端通信方式,如http或socket等,
processor是用户实现的消息处理器,执行业务逻辑处理,
server是组装这些组件:从transport接受序列化消息,根据protocol协议反序列化,调用用户定义的消息处理器,并将消息处理器返回结果序列化,然后写回transport响应客户端。
- 协议
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中的ByteArrayOutputStream实现。
5、TZlibTransport- 使用执行zlib压缩,不提供Java的实现。
通信模型
- 阻塞服务
TSimpleServer
TThreadPoolServer
- 非阻塞服务模型
TNonblockingServer
THsHaServer
TThreadedSelectorServer
ref
https://qinzhaokun.github.io/2017/09/12/Thrift%E9%80%9A%E4%BF%A1%E6%A8%A1%E5%9E%8B/
https://www.cnblogs.com/exceptioneye/p/4945073.html
https://blog.csdn.net/houjixin/article/details/42778335
