
1.自定义标识符VS自动标识符
2.Optional VS Required VS Default
3.struct的组合(struct不支持继承)
首先是Thrift文件定义如下:
namespace java com.whp.demo.thrift.optional
struct Car {
1:required i32 carId,
2:required string carName,
3:required i64 price,
4: optional i16 age=0
}
struct Consumer{
1:required i32 consumerId,
2:optional string name
}
struct Order{
required i64 orderId,
required Car car,
required Consumer consumer,
}
service CarService{
Order createBuyCarOder(1:required Car car, 2:required Consumer consumer)
}
include "other.thrift" //包含其它的thrift文件
namespace java com.whp.demo //java下的namespace com.whp.demo
typedef i32 int //tydef 语法
typedef i64 long
enum Player {
JAVA = 0
FLASH = 1
}
#required:一定会被序列号,并且如果没有被复制,将会被提醒
#optional:如果没有被赋值,将不会被序列化。如果有默认值,则将会被序列化成默认值。具有一定的向后兼容性。
#default: 默认情况下是 req-in,opt-out即 对于write stream默认是required,对于read stream是optional
#如果一个程序分开来开发,那版本问题就是绕不过去的问题。Thrift的版本是通过“field identifiers”来实现的,每个结构由其标识,结构中的每个域有其标识,这两个标识唯一决定了一个数据域。在解码的时候,数据域的标识被检查,如果不能识别,则该数据域被抛弃.
用户自定义编号是从1开始的正整数
默认编号是从-1 开始递减。
struct Order{
required i64 orderId,
required Car car,
required Consumer consumer,
}
比如这个,编译后会成为:
ORDER_ID((short)-1,"orderId"),
CAR((short)-2,"car"),
CONSUMER((short)-3,"consumer")
struct Order{
required i64 orderId,
required Car car,
required Consumer consumer,
}
我们可以直接在Order中组合Car和Consumer
Thrift其实应分成三个部分,一个叫做Thrift代码生成器,一个叫做Thrift应用框架(库),最后一个是它生成的代码。Thrift应用的基本流程如下图所示。
从上图,要生成一个Thrift应用,需用以下文件:
一个.thrift文件:该文件是通信接口的定义,最主要的是信息流的格式。
编程语言:这个无需解释。
Thrift代码生成器(Thrift compiler,翻译成代码生成器似乎更合适):这个东西是安装thrift过程中生成的,它可以产生若干符合你约定通信格式的代码。
Thrift应用框架库:这个东西也是在安装过程中产生的。
其他第三方支撑库:对C++来说,最主要是boost.thread、libevent,log4cxx等,按照运行的模式,生成的代码中可能需用调用这些库。
thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Go,Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
thrift最初由facebook开发用做系统内各语言之间的RPC通信 。
2007年由facebook贡献到apache基金 ,08年5月进入apache孵化器 。
支持多种语言之间的RPC方式的通信:php语言client可以构造一个对象,调用相应的服务方法来调用java语言的服务 ,跨越语言的C/S RPC调用 。
thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)