Thrift架构~thrift中间语言的认识(只有它什么都不是,它才有可能什么都是)

中间语言是我为thrift语言起的名字,呵呵,为什么叫它中间语言呢,其实意思很简单,就是说,它只是一个过程,而不是一个最终的结果,而结果需要这个中间过程的影响,没有中间语言,结果语言也不能产生,在thrift架构中,如果你希望产生一个为C语言提供的接口,那么,你需要先书写thrift是间语言,然后,需要thrift程序将它编译成c语言的格式才行,这是正常的,“只有它什么都不是,它才有可能什么都是”,呵呵。

thrift中的数据类型

下面是thrift本身对类型的重定义,看一下:

 bool        Boolean, one byte
 byte        Signed byte
 i16         Signed 16-bit integer
 i32         Signed 32-bit integer
 i64         Signed 64-bit integer
 double      64-bit floating point value
 string      String
 binary      Blob (byte array)
 map<t1,t2>  Map from one type to another
 list<t1>    Ordered list of one type
 set<t1>     Set of unique elements of one type

通过上面的说明,我们可以看出,thrift里面有的是各种语言公有的类型,而一些个别语言中才出现的东西,如dictionary,hash等并没有在thrift中出现,这是正常的,对于一种公用语言来说,它不应该包括那些特殊的东西,而它可以为那些特殊的东西建立一个自己的标准,让自己去适应它们,如thrift里的map<t1,t2>类型相当于CSharp里的Dictionary<t1,t2>字典类型,这些在生成目标语言之后,都可以进行验证。

thrift中没有类,但有结构体

我想,这应该是对C语言的一种照顾,在thrift中没有出现class(类)的概念,而有值类型struct,实事上,对于结构的认识我们一直都有偏见,让为某些高级语言里有了类,就不应该有结构了,还说自己的代码中从来没有出现过结构。在这里,我需要对这位同学说,你的代码里之所以没有结构,完成是因为你对这种数据类型的不理解,不深入引起的,对于业务简单,或者没有业务的对象来说,为了将属性进行封装,完成可以使用结构来实现,看看C语言你就知道结构有多重要了,呵呵。

枚举:

enum Operation {
  ADD = 1,
  SUBTRACT = 2,
  MULTIPLY = 3,
  DIVIDE = 4
}

结构(结构体)

struct DataSync{
1:bool IsSync,/*是否要同步*/
2:string FilePath,/*文件路径*/
3:i64 CurrentSeek,/*当前针*/
}

异常

exception InvalidOperation {
  1: i32 what,
  2: string why
}

服务,我们的接口定义在服务中,接口是客户端与服务器端通讯的基础,客户端使用自己语言的接口与服务器端通讯,客户端与服务器端的平台,开发环境可以完全不同,只要知识服务端的IP和端口即可实现通讯,这就是across language的thrift的魅力!

service FileTransport{
bool Upload(1:DataSegment dataSegment),/*客户端传入一个byte数组,服务器返回是否上传成功,desPath表示上传后存储的路径*/
binary Download(1:string fileUrl),/*客户端传入一个URL,服务器返回这个URL指向的文件,并为byte数组的形式返回*/
DataSync IsSync(1:string fileName),/*檢測文件是否需要進行同步上傳*/
bool UpdateDataSync(1:DataSync dataSync)/*從數據庫中更新数据同步状态,主键为文件完整名称*/
}

当我们运行thrift命令去生成目标代码后,在指定的gen文件夹中生成,例如生成csharp的代码,它会在thrift同级目录中建立一个gen-csharp文件夹,然后代码生成会以结构,枚举,服务为单位去生成多个文件。如图:

 

posted @ 2014-01-13 15:56  张占岭  阅读(4347)  评论(1编辑  收藏  举报