Thrift
是一个轻量级、跨语言的远程服务调用框架,它通过自身的IDL
中间语言, 并借助代码生成引擎生成各种主流语言的RPC
服务端/客户端模板代码。
如何实现多语言之间的通信?
数据传输使用 socket(多种语言均支持),数据再以特定的格式 (String 等) 发送,接收方语言进行解析。
定义 thrift 的文件,由 thrift 文件(IDL) 生成双方语言的接口,model,在生成的 model 以及接口中会有解码编码的代码
Thrift 传输格式
- TBinaryProtocol: 二进制格式
- TCompactProtocol: 压缩格式
- TJSONProtocol: JSON格式
- TSimpleJSONProtocol: 提供 JSON 只写协议,生成的文件很容易通过脚本语言解析
- TDebugProtocol:使用易懂的可读的文本格式,以便于debug
Thrift数据传输方式
- TSocket:阻塞式socket
- TFramedTransport:以frame为单位进行传输,以非阻塞式服务中使用
- TFileTransport:以文件形式进行传输
- TMemoryTransport:将内存用于 I/O, Java 实现内部实际使用了简单的 ByteArrayOutputStream
- TZlibTransport:使用 zlib 进行压缩,与其他传输方式联合使用。当前无 Java 实现
Thrift支持的服务模型
- TSimpleServer:简单的单线程服务模型,常用于测试
- TThreadPoolServer:多线程服务模型,使用标准的阻塞式 IO
- TNonblockingServer:多线程服务模型,使用非阻塞式 IO(需使用TFramedTransport数据传输方式)
- THsHaServer:THsHa 引入了线程池去处理,其模型把读写任务放到线程池去处理;Half-sync/Half-async 的处理模式,Half-async 是在处理 IO 事件上(accept/read/write io),Half-sync 用于 handler 对 rpc 的同步处理