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文件夹,然后代码生成会以结构,枚举,服务为单位去生成多个文件。如图:
Thrift架构~thrift中间语言的认识(只有它什么都不是,它才有可能什么都是)的更多相关文章
- Thrift架构~目录
回到占占推荐博客索引 概念相关 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ru ...
- Thrift架构~windows下安装和Hello World及编码引起的错误
最近开始正式接触Thrift架构,很牛B的技术,它被apache收纳了,属于开源中的一员,呵呵. 概念: Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基 ...
- Thrift架构介绍
Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目.Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型, ...
- Thrift架构~从图中理解thrift,它事实上是一种远程过程调用
thrift为我们简化了tcp通讯,它可以使用我们方便的建立各种语言的服务端与客户端,并实现客户端对服务器的远程过程调用,简单的说就是服务器通过thrift架构对外开放一些接口,并自己实现这些接口,如 ...
- Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo
1.缘由 前几天偶尔在网上看到thrift的信息,其内容和作用极大的引起了我的兴趣,因为我也是做iOS开发的,通过在网上的查询发现信息虽然很多实用的很少,容易误导他人,经过自己的成功实践,做了笔录,为 ...
- Thrift架构~动态Thrift插件的注入
先说AOP 说到注入,大家就会想起来IoC和AOP,确实如些,这一讲中,我们通过unity来实现对thrift插件的动态注入,事实上,这个功能在以后的项目中经常要用到,比如,你将一些功能分发到指定服务 ...
- 【thrift】thrift入门初探--thrift安装及java入门实例
转载:https://www.cnblogs.com/fingerboy/p/6424248.html 公司的一些平台服务框架底层封装了thrift提供服务,最近项目不是很紧,于是研究了一下,刚刚入门 ...
- 【thrift】thrift详解
转载:http://zheming.wang/thrift-rpcxiang-jie.html Thrift Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年 ...
- Java使用Thrift,Thrift结构体定义
1.Thrift定义文件,Thrift常见的数据类型 1.基本类型(括号内为对应的Java类型): bool(boolean): 布尔类型(TRUE or FALSE) byte(byte): 8位带 ...
随机推荐
- VMware 搭建 虚拟机设置 静态IP地址配置
第一步: 第二部:注意网关 第三步: 在配置CentOs安装的时候,记得勾选
- Accordion - 手风琴
//手风琴效果 <div style="overflow:hidden;height:400px;width:948px;"> <div class=" ...
- Python 10 —— 杂
Python 10 —— 杂 科学计算 NumPy:数组,数组函数,傅里叶变换 SciPy:依赖于NumPy,提供更多工具,比如绘图 绘图 Matplitlib:依赖于NumPy和Tkinter
- Cobbler学习之二--Cobbler的Web管理和维护
Cobbler的Web管理模块和命令行模块是可以分开工作的,没有依赖关系. 1 WebUI的功能 查看所有的对象和配置文件 添加或者删除system,distro, profile 执行“cobble ...
- [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_ ...
- 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 ...
- Android Activity生命周期
从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态 activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个a ...
- Unity : Ran out of trampolines of type 2
Unity 导出游戏到 iOS 平台,当时选择的设置是 mono2x, 结果游戏各种莫名其妙的崩溃,再崩溃, 几乎运行不到一分钟就崩溃,而在 editor 和 android 平台都是正常的. 查看出 ...
- RHEL5.8的NFS配置文件
RHEL5.8的NFS配置文件 路径:/etc/sysconfig/nfs # # Define which protocol versions mountd # will advertise. Th ...
- ABP框架详解(三)Domain
此处的Domain主要指Abp类库根目录下Domain文件夹.顾名思义该目录下是用来存放与领域实体,领域逻辑执行,存储,领域服务相关的内容. 1.Entities (1)为整个Abp框架后期开发的所有 ...