前言:thrift的版本问题比较麻烦,高版本的在c++上需要c++ 11的支持,而低版本则可能在go的支持上有问题,测试发现thrift 9.0以上需要c++ 11,而thrift 8.0则在go的支持上可能会存在问题。使用的发行版本是CentOS 6.5,GCC 4.4.7。最终选择使用thrift-0.8.0来编译安装。
wget http://archive.apache.org/dist/thrift/0.8.0/thrift-0.8.0.tar.gztar -zxvf thrift-0.8.0.tar.gzcd thrift-0.11.0./configure #这一步配置可以选择支持的语言,如Python,c++,go等。可以./configure --help来查看可配置项。如./configure --without-gomake && make install
注意:在执行完configure后,会显示实际上支持的库,比如
thrift 0.11.0 Building C (GLib) Library .... : noBuilding C# (Mono) Library ... : noBuilding C++ Library ......... : yesBuilding D Library ........... : noBuilding Dart Library ........ : noBuilding dotnetcore Library .. : noBuilding Erlang Library ...... : noBuilding Go Library .......... : noBuilding Haskell Library ..... : noBuilding Haxe Library ........ : noBuilding Java Library ........ : noBuilding Lua Library ......... : noBuilding NodeJS Library ...... : noBuilding Perl Library ........ : noBuilding PHP Library ......... : noBuilding Plugin Support ...... : noBuilding Python Library ...... : yesBuilding Py3 Library ......... : yesBuilding Ruby Library ........ : noBuilding Rust Library ........ : no
如果编译没问题,那么就可以查看一下版本thrift -version
,如果能显示,那么就ok。
安装完后要搞一个小程序测试一下。thrift的使用是从.thirft文件开始的。
安装完后,自带的tutorial就有小例子,但感觉不够直观,来copy一个试试效果。
step 1 编写thrift文件 yang.thrift
struct Student{1: i32 sno,2: string sname,3: bool ssex,4: i16 sage,}service Serv{ void put(1: Student s), i32 icall(1: Student s), string scall(1: Student s), /* string& srcall(1: Student s), ----------------------------- -thrift -r --gen cpp student.thrift -error: - [ERROR:/root/test/thrift/student.thrift:12] (last token was '&') - syntax error - [FAILURE:/root/test/thrift/student.thrift:12] Parser error during include pass. ----------------------------- */ Student stcall(1: Student s),}
step 2 生成源代码
比如要生成c++代码,就可以 thrift -r --gen cpp yang.thrift
。这样就能在目录下生成一个gen-cpp目录,里面生成了多个文件,其中的Serv_server.skeleton.cpp
就是服务器端main函数入口文件。--gen后指定生成的语言,yang.thrift就是编写的thrift魔板。
step 3 编写客户端代码
新闻热点
疑难解答