Thrift的简单使用 - Season In The Code - 博客频道 - CSDN.NET
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示例,想知道详细的可以去看看。