一、thrift简介
thrift是Facebook开源的一套rpc框架,目前被许多公司使用
我理解的特点
- 使用IDL语言生成多语言的实现代码,程序员只需要实现自己的业务逻辑
- 支持序列化和反序列化操作,底层封装协议,传输模块
- 以同步rpc调用为主,使用libevent evhttp支持http形式的异步调用
- rpc服务端线程安全,客户端大多数非线程安全
- 相比protocol buffer效率差些,protocol buffer不支持rpc,需要自己实现rpc扩展,目前有grpc可以使用
由于thrift支持序列化和反序列化,并且支持rpc调用,其代码风格较好并且使用方便,对效率要求不算太高的业务,以及需要rpc的场景,可以选择thrift作为基础库
层次图:
二、编译(thrift for c++ && centos7)
1、官网获取源码包 thrift-0.11.0.tar.gz 解压
tar zxvf thrift-0.11.0.tar.gz2、安装依赖
yum -y install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel3、编译boost
使用boost_1_63_0.tar.gz
./bootstrap.sh ./b24、编译thrift
源码根目录运行
./configure && make sudo make install5、验证安装
thrift -version 显示 Thrift version 0.11.0三、编写使用IDL编写.thrift文件
这里给出一个thrift的IDL基本语法列表,详细用法可以去官网查找
namespace cpp thrift.Test //typedef 用法 typedef i32 MyInt32; typedef string MyString; typedef i32 UserId; //struct 结构定义 struct TypedefTestStruct { 1: MyInt32 field_MyInt32; 2: MyString field_MyString; 3: i32 field_Int32; 4: string filed_string; } //enum 枚举定义 enum Numberz { ONE = 1, TWO, THREE, FIVE = 5, SIX, EIGHT = 8 } //const 用法 const Numberz myNumberz = Numberz.ONE; struct Bonk { 1: string message, 2: i32 type } //类型嵌套 struct Xtruct { 1: string string_thing, 2: i8 byte_thing, 3: i32 i32_thing, 4: i64 i64_thing } struct Xtruct2 { 1: i8 byte_thing, 2: Xtruct struct_thing, 3: i32 i32_thing } //支持map list set类型分别对应C++中的 map = stl::map list = stl::vector set = stl::set typedef map<string, Bonk> MapType struct Insanity { 1: map<Numberz, UserId> userMap; 2: list<Xtruct> xtructs; } struct CrazyNesting { 1: string string_field, 2: optional set<Insanity> set_field; 3: required list<map<set<i32>, map<i32,set<list<map<Insanity,string>>>>>> list_field, 4: binary binary_field } //union用法 union SomeUnion { 1: map<NumberZ, UserId> map_thing, 2: string string_thing, 3: i32 i32_thing,
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率
