准备
到http://incubator.apache.org/thrift/download/ 下载Thrift的源码包thrift-incubating-0.2.0.tar.gz。
环境
1.遵从POSIX的**NIX系统(笔者使用的是Debian5.0),或者在Windows下安装Cygwin
2.g++ 3.3.5+(http://gcc.gnu.org/)
3.boost 1.33.1+。boost 1.33.1+只是官方要求的安装thrift的最低boost版本,笔者建议你下载一个最新的版本(http://www.boost.org/),因为可能之后使用到的Facebook其他开源框架要求更高版本的boost,而不限于boost.1.33.1。如scribe(facebook的分布式日志服务器),就需要boost1.36+。
4.lex和yacc的运行时库也需要安装
编译thrift源码所需要的工具
1.GNU build tools:autoconf 2.59+ (http://www.gnu.org/software/autoconf/), automake 1.9+(http://www.gnu.org/software/automake/), libtool 1.5.24+(http://www.gnu.org/software/libtool/)
2.pkg-config(http://pkg-config.freedesktop.org/wiki/)
3.lex and yacc (http://dinosaur.compilertools.net/)。已经有flex和bison
所需语言库
C++ :Boost 1.33.1+ ,libevent (可选,用来创建非阻塞服务器) ,zlib (可选)
Java :Java 1.5+ ,Apache Ant ,Apache Ivy,Apache Commons Lang,SLF4J
C#: Mono 1.2.4+ 或者 Visual Studio 2005+
Python: 2.4+
PHP: 5.0+
Ruby: 1.8+
Erlang: R12
Perl 5: Bit::Vector ,Class::Accessor
以上的语言库是看你具体需要thrift生成怎样的语言,并不是必须全部都安装。
配置与编译thrift源码
生成配置脚本
配置安装参数(这里不作任何配置,使用默认配置)
./configure
make thrift
make
make install
其中make install是需要root身份的。
这样thrift就完成了安装工作
Thrift(http://github.com/facebook/thrift)是一个跨语言服务部署架构,2007年由Facebook开发,之后在2008年加到Apache计划中(http://incubator.apache.org/thrift/)。它是类似于SOAP,CORBA以及Google Protocol Buffers这样的服务架构。Thrift提供了完整client/server RPC的实现,只需要定义好中间定义语言,就可以生成指定语言的代码(包括client和server)。
Thrift能生成的语言有: C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml
使用thrift,以下例子你可以在http://incubator.apache.org/thrift/中找到。
定义.thrift接口文件。
你需要知道thrift所支持的类型(http://wiki.apache.org/thrift/ThriftTypes)
下面是一个简述:
类型 | 描述 |
bool | true, false |
byte | 8位的有符号整数 |
i16 | 16位的有符号整数 |
i32 | 32位的有符号整数 |
i64 | 64位的有符号整数 |
double | 64位的浮点数 |
string | UTF-8编码的字符串 |
binary | 字符数组 |
struct | 结构体 |
list<type> | 有序的元素列表,类似于STL的vector |
set<type> | 无序的不重复元素集,类似于STL的set |
map<type1,type2> | key-value型的映射,类似于STL的map |
exception | 是一个继承于本地语言的exception基类 |
service | 服务。包含多个函数接口(纯虚函数) |
在了解过thrift内置类型之后,我们可以简单地定义一个服务,把用户的信息从前端发送到服务器,然后当需要的时候再从服务器获取某个用户的信息:
struct UserProfile { 1: i32 uid, 2: string name, }
service UserStorage { void store(1: UserProfile user), UserProfile retrieve(1: i32 uid) }
把以上代码存到 service.thrift文件中。
如果我们需要用python来做输出语言。就在命令行中输入:
thrift –r –gen py service.thrift
之后,你就会在当前目录下看到一个新建的目录叫”gen-py”,在里面你就可以看到由service.thrift生成的python服务接口代码。
UserStorage.py中的Client就是客户端调用的接口,只需要创建一个Client实例就可以调用例子中的store和retrieve的接口。而Iface就是服务端所需要实现的接口,对应例子中的store和retrieve的逻辑处理。
ttypes.py是存放枚举类型的结构。
UserStorage-remote.py是一个客户端调用服务接口的demo示例,想知道详细的可以去看看。
http://blog.csdn.net/MyOnlyLee/archive/2010/02/04/5289296.aspx
http://blog.csdn.net/MyOnlyLee/archive/2010/02/04/5289380.aspx