Thrift的简单使用

Thrift的简单使用 - Season In The Code - 博客频道 - CSDN.NET


Thrift的简单使用


分类:
Facebook技术


3658人阅读
评论(0)
收藏
举报

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

)

下面是一个简述:

类型描述
booltrue, false
byte8位的有符号整数
i1616位的有符号整数
i3232位的有符号整数
i6464位的有符号整数
double64位的浮点数
stringUTF-8编码的字符串
binary字符数组
struct结构体
list<type>有序的元素列表,类似于STL的vector
set<type>无序的不重复元素集,类似于STL的set
map<type1,type2>key-value型的映射,类似于STL的map
exception是一个继承于本地语言的exception基类
service服务。包含多个函数接口(纯虚函数)

在了解过thrift内置类型之后,我们可以简单地定义一个服务,把用户的信息从前端发送到服务器,然后当需要的时候再从服务器获取某个用户的信息:

  1. struct UserProfile {  
  2.   1: i32 uid,  
  3.   2: string name,  
  4. }  
  5.   
  6. service UserStorage {  
  7.   void store(1: UserProfile user),  
  8.   UserProfile retrieve(1: i32 uid)  
  9. }  

把以上代码存到 service.thrift文件中。



如果我们需要用python来做输出语言。就在命令行中输入:

  1. 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示例,想知道详细的可以去看看。

原文地址:https://www.cnblogs.com/lexus/p/2778262.html