Thrift 应用总结

以前工作中也用过一些远程服务调用,比如 Webservice,PHP 中常用的 SOAP,XML-RPC,还有 jsonp 和 restful 之类的。最近公司工作中,用到了 thrift 这种远程服务调用框架,总结和记录下。 Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。它通过一个中间语言 IDL(接口定义语言)来定义 RPC 的接口和数据类型,然后通过一个编译器生成不同语言的代码并由生成的代码负责 RPC 协议层和传输层的实现。 Thrift 的架构图 黄色是用户实现的业务逻辑,褐色部分是根据 Thrift 定义的服务接口描述文件生成的客户端和服务器端代码框架,红色部分是根据 Thrift 文件生成代码实现数据的读写操作。红色部分以下是 Thrift 的传输体系、协议以及底层 I/O 通信,使用 Thrift 可以很方便的定义一个服务并且选择不同的传输协议和传输层而不用重新生成代码。用户在 Thirft 描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提服务)。其中 protocol(协议层, 定义数据传输格式,可以为二进制或者 XML 等)和 transport(传输层,定义数据传输方式,可以为 TCP/IP 传输,内存共享或者文件共享等)被用作运行时库。 传输协议 在传输协议上总体划分为文本和二进制 ,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数. TBinaryProtocol — 二进制编码格式进行数据传输 TCompactProtocol — 高效率的、密集的二进制编码格式进行数据传输 TJSONProtocol — 使用 JSON 的数据编码协议进行数据传输 TSimpleJSONProtocol — 只提供 JSON 只写的协议,适用于通过脚本语言解析 TDebugProtocol – 使用易懂的可读的文本格式,以便于 debug 数据传输 TSocket — 使用阻塞式 I/O 进行传输,是最常见的模式 TFramedTransport — 使用非阻塞方式,按块的大小进行传输 TNonblockingTransport — 使用非阻塞方式,用于构建异步客户端 TMemoryTransport – 将内存用于 I/O TZlibTransport – 使用 zlib 进行压缩, 与其他传输方式联合使用 TFileTransport – 以文件形式进行传输 服务端类型

阅读全文

作者的图片

Ryan是菜鸟 | LNMP技术栈笔记

一步一个脚印,一直在路上!记录LNMP技术栈,Web架构,区块链等笔记

菜鸟码农

南京