中间语言是我为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文件夹,然后代码生成会以结构,枚举,服务为单位去生成多个文件。如图:

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

  1. Thrift架构~目录

    回到占占推荐博客索引 概念相关 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ru ...

  2. Thrift架构~windows下安装和Hello World及编码引起的错误

    最近开始正式接触Thrift架构,很牛B的技术,它被apache收纳了,属于开源中的一员,呵呵. 概念: Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基 ...

  3. Thrift架构介绍

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型, ...

  4. Thrift架构~从图中理解thrift,它事实上是一种远程过程调用

    thrift为我们简化了tcp通讯,它可以使用我们方便的建立各种语言的服务端与客户端,并实现客户端对服务器的远程过程调用,简单的说就是服务器通过thrift架构对外开放一些接口,并自己实现这些接口,如 ...

  5. Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo

    1.缘由 前几天偶尔在网上看到thrift的信息,其内容和作用极大的引起了我的兴趣,因为我也是做iOS开发的,通过在网上的查询发现信息虽然很多实用的很少,容易误导他人,经过自己的成功实践,做了笔录,为 ...

  6. Thrift架构~动态Thrift插件的注入

    先说AOP 说到注入,大家就会想起来IoC和AOP,确实如些,这一讲中,我们通过unity来实现对thrift插件的动态注入,事实上,这个功能在以后的项目中经常要用到,比如,你将一些功能分发到指定服务 ...

  7. 【thrift】thrift入门初探--thrift安装及java入门实例

    转载:https://www.cnblogs.com/fingerboy/p/6424248.html 公司的一些平台服务框架底层封装了thrift提供服务,最近项目不是很紧,于是研究了一下,刚刚入门 ...

  8. 【thrift】thrift详解

    转载:http://zheming.wang/thrift-rpcxiang-jie.html Thrift Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年 ...

  9. Java使用Thrift,Thrift结构体定义

    1.Thrift定义文件,Thrift常见的数据类型 1.基本类型(括号内为对应的Java类型): bool(boolean): 布尔类型(TRUE or FALSE) byte(byte): 8位带 ...

随机推荐

  1. VMware 搭建 虚拟机设置 静态IP地址配置

    第一步: 第二部:注意网关 第三步: 在配置CentOs安装的时候,记得勾选

  2. Accordion - 手风琴

    //手风琴效果 <div style="overflow:hidden;height:400px;width:948px;"> <div class=" ...

  3. Python 10 —— 杂

    Python 10 —— 杂 科学计算 NumPy:数组,数组函数,傅里叶变换 SciPy:依赖于NumPy,提供更多工具,比如绘图 绘图 Matplitlib:依赖于NumPy和Tkinter

  4. Cobbler学习之二--Cobbler的Web管理和维护

    Cobbler的Web管理模块和命令行模块是可以分开工作的,没有依赖关系. 1 WebUI的功能 查看所有的对象和配置文件 添加或者删除system,distro, profile 执行“cobble ...

  5. [UCSD白板题] Minimum Dot Product

    Problem Introduction The dot product of two sequences \(a_1,a_2,\cdots,a_n\) and \(b_1,b_2,\cdots,b_ ...

  6. Last non-zero Digit in N!(阶乘最后非0位)

    Last non-zero Digit in N! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  7. Android Activity生命周期

    从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态  activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个a ...

  8. Unity : Ran out of trampolines of type 2

    Unity 导出游戏到 iOS 平台,当时选择的设置是 mono2x, 结果游戏各种莫名其妙的崩溃,再崩溃, 几乎运行不到一分钟就崩溃,而在 editor 和 android 平台都是正常的. 查看出 ...

  9. RHEL5.8的NFS配置文件

    RHEL5.8的NFS配置文件 路径:/etc/sysconfig/nfs # # Define which protocol versions mountd # will advertise. Th ...

  10. ABP框架详解(三)Domain

    此处的Domain主要指Abp类库根目录下Domain文件夹.顾名思义该目录下是用来存放与领域实体,领域逻辑执行,存储,领域服务相关的内容. 1.Entities (1)为整个Abp框架后期开发的所有 ...