客户端通过网络请求HelloWorldService的say()方法的具体实现
前言
Thrift是一个轻量级、跨语言的长途处事挪用框架,最初由Facebook开发,后面进入Apache开源项目。它通过自身的IDL中间语言, 并借助代码生成引擎生成各类主流语言的RPC处事端/客户端模板代码。
Thrift撑持多种差此外编程语言,包孕C++、Java、Python、PHP、Ruby等,本系列主要讲述基于Java语言的Thrift的配置方法和具体使用。
正文
Thrift的技术栈
Thrift对软件栈的界说非常的清晰, 使得各个组件能够松散的耦合, 针对差此外应用场景, 选择差别是方法去搭建处事。
Thrift软件栈分层从下向上分袂为:传输层(Transport Layer)、协议层(Protocol Layer)、措置惩罚惩罚层(Processor Layer)和处事层(Server Layer)。
传输层(Transport Layer):传输层卖力直接从网络中读取和写入数据,它界说了具体的网络传输协议;好比说TCP/IP传输等。
协议层(Protocol Layer):协议层界说了数据传输格局,卖力网络传输数据的序列化和反序列化;好比说JSON、XML、二进制数据等。
措置惩罚惩罚层(Processor Layer):措置惩罚惩罚层是由具体的IDL(接口描述语言)生成的,封装了具体的底层网络传输和序列化方法,并委托给用户实现的Handler进行措置惩罚惩罚。
处事层(Server Layer):整合上述组件,供给具体的网络线程/IO处事模型,形成最终的处事。
Thrift的特性
(一) 开发速度快
通过编写RPC接口Thrift IDL文件,操作编译生成器自动生成处事端骨架(Skeletons)和客户端桩(Stubs)。从而省去开发者自界说和维护接口编解码、动静传输、处事器多线程模型等根本事情。
处事端:只需要凭据处事骨架即接口,编写好具体的业务措置惩罚惩罚措施(Handler)即实现类即可。
客户端:只需要拷贝IDL界说好的客户端桩和处事东西,然后就像挪用本地东西的要领一样挪用远端处事。
(二) 接口维护简单
通过维护Thrift格局的IDL(接口描述语言)文件(注意写好注释),即可作为给Client使用的接口文档使用,,也自动生成接口代码,始终连结代码和文档的一致性。且Thrift协议可灵活撑持接口的可扩展性。
(三) 学习本钱低
因为其来自Google Protobuf开发团队,所以其IDL文件气势派头类似Google Protobuf,且越发易读易懂;出格是RPC处事接口的气势派头就像写一个面向东西的Class一样简单。
初学者只需参照:,一个多小时就可以理解Thrift IDL文件的语法使用。
(四) 多语言/跨语言撑持
Thrift撑持C++、 Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk等多种语言,即可生成上述语言的处事器端和客户端措施。
对付我们经常使用的Java、PHP、Python、C++撑持良好,虽然对iOS环境的Objective-C(Cocoa)撑持稍逊,但也完全满足我们的使用要求。
(五) 不变/广泛使用
Thrift在很多开源项目中已经被验证是不变和高效的,例如Cassandra、Hadoop、HBase等;国外在Facebook中有广泛使用,国内包孕百度、美团小米、和饿了么等公司。
Thrift的数据类型
Thrift 脚本可界说的数据类型包孕以下几种类型:
根基类型:
bool: 布尔值
byte: 8位有标记整数
i16: 16位有标记整数
i32: 32位有标记整数
i64: 64位有标记整数
double: 64位浮点数
string: UTF-8编码的字符串
binary: 二进制串
布局体类型:
struct: 界说的布局体东西
容器类型:
list: 有序元素列表
set: 无序无反复元素调集
map: 有序的key/value调集
异常类型:
exception: 异常类型
处事类型:
service: 具体对应处事的类
Thrift的协议
Thrift可以让用户选择客户端与处事端之间传输通信协议的类别,在传输协议上总体划分为文本(text)和二进制(binary)传输协议。为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为大都,有时还会使用基于文本类型的协议,这需要按照项目/产品中的实际需求。常用协议有以下几种:
TBinaryProtocol:二进制编码格局进行数据传输
TCompactProtocol:高效率的、密集的二进制编码格局进行数据传输
TJSONProtocol: 使用JSON文本的数据编码协议进行数据传输
TSimpleJSONProtocol:只供给JSON只写的协议,适用于通过脚本语言解析
Thrift的传输层
常用的传输层有以下几种:
TSocket:使用梗阻式I/O进行传输,是最常见的模式
TNonblockingTransport:使用非梗阻方法,用于构建异步客户端
TFramedTransport:使用非梗阻方法,按块的巨细进行传输,类似于Java中的NIO
Thrift的处事端类型
TSimpleServer:单线程处事器端,使用标准的梗阻式I/O
TThreadPoolServer:多线程处事器端,使用标准的梗阻式I/O
TNonblockingServer:单线程处事器端,使用非梗阻式I/O
THsHaServer:半同步半异步处事器端,基于非梗阻式IO读写和多线程事情任务措置惩罚惩罚
TThreadedSelectorServer:多线程选择器处事器端,对THsHaServer在异步IO模型长进行增强
Thrift入门示例
(一) 编写Thrift IDL文件
a). 下载0.10.0的Thrift IDL编译器,下载地点:。 通过编译生成器生成.java接口的类文件。
b). 下载Windows安置环境的.exe文件,将thrift.exe的路径插手环境变量中。在Idea上安置Thrift编纂插件。
c). 编写hello.thrift的IDL文件:
service HelloWorldService {
string say(1: string username)
}
d). 使用代码生成工具生成代码,执行以下命令:
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32037.html