从零开始学习Thrift之一——了解Thrift
1. What is Thrift
Thrift is a lightweight, language-independent software stack for point-to-point RPC implementation.
Thrift provides clean abstractions and implementations for data transport, data serialization, and
application level processing. The code generation system takes a simple definition language as input
and generates code across programming languages that uses the abstracted stack to build interoperable RPC clients and servers.
上面是官方给出的介绍,简单的说就是:
Thrift是一种轻量级、独立于语言的点对点的RPC实现框架,且其为数据传输,数据序列化和应用程序级处理提供了干净的抽象和实现,生成的代码可以跨语言跨平台的调用。
那什么是RPC框架呢?
一般的HTTP接口请求是在应用层完成的,而RPC可以不依赖于应用层协议,可以直接基于TCP进行远程调用,在传输层中即可完成通信,因此更适于某些对效率要求更高的场景。由于RPC调用方式依赖于客户端与服务端之间建立Socket连接来实现二进制数据通信,底层会比较复杂,所以一些RPC框架应运而生来封装这种复杂性,让开发者将精力聚焦于业务之上。常见的RPC框架包括:Thrift、gRPC、Finagle、Dubbo等等。
2. Thrift文件的定义与编写
使用IDL对接口进行描述的thrift文件命名一般都是以“.thrift”作为后缀:XXX.thrift,可以在该文件的开头为该文件加上命名空间限制,格式为:namespace语言 命名空间的名字;
编写IDL文件时需要注意的问题
函数的参数要用数字依序标好,序号从1开始,形式为:“序号:参数名”;
每个函数的最后要加上“,”,最后一个函数不加;
在IDL中可以使用/……/添加注释
变量名不可以数字开头
Thrift支持的数据类型
基本类型:
bool:布尔值,true 或 false,对应 Java 的 boolean
byte:8 位有符号整数,对应 Java 的 byte
i16:16 位有符号整数,对应 Java 的 short
i32:32 位有符号整数,对应 Java 的 int
i64:64 位有符号整数,对应 Java 的 long
double:64 位浮点数,对应 Java 的 double
string:未知编码文本或二进制字符串,对应 Java 的 String
结构体类型:
struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean
容器类型:
list:对应 Java 的 ArrayList
set:对应 Java 的 HashSet
map:对应 Java 的 HashMap
异常类型:
exception:对应 Java 的 Exception
服务类型:
service:对应服务的类
3. 生成接口文件
搭建Thrift编译环境之后,使用下面命令即可将IDL文件编译成对应语言的接口文件:
thrift --gen <language> <Thrift filename>
生成接口文件之后就可以继续接下来的服务端和客服端代码开发了,下次继续学习。
4. Thrift的相关网址和资料:
- Thrift的官方网站:http://thrift.apache.org/
- Thrift官方下载地址:http://thrift.apache.org/download
- Thrift官方的IDL示例文件(自己写IDL文件时可以此为参考):
https://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob_plain;f=test/ThriftTest.thrift;hb=HEAD
- 各种环境下搭建Thrift的方法:http://thrift.apache.org/docs/install/
该页面中共提供了CentOS\Ubuntu\OS X\Windows几种环境下的搭建Thrift环境的方法。
参考:
https://blog.csdn.net/houjixin/article/details/42778335
https://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/index.html