首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Thrift架构介绍(2)

Thrift架构介绍(2)

基本语法类型Thrift类型系统包括预定义基本类型,用户自定义结构体,容器类型,异常和服务定义
基本类型
  • bool:布尔类型(true or value),占一个字节
  • byte:有符号字节
  • i16:16位有符号整型
  • i32:32位有符号整型
  • i64:64位有符号整型
  • double:64位浮点数
  • string:未知编码或者二进制的字符串
注意,thrift不支持无符号整型,因为很多目标语言不存在无符号整型(如java)。
容器类型Thrift容器与类型密切相关,它与当前流行编程语言提供的容器类型相对应,采用java泛型风格表示的。Thrift提供了3种容器类型:
  • List:一系列t1类型的元素组成的有序表,元素可以重复
  • Set:一系列t1类型的元素组成的无序表,元素唯一
  • Map<t1,t2>:key/value对(key的类型是t1且key唯一,value类型是t2)。
容器中的元素类型可以是除了service意外的任何合法thrift类型(包括结构体和异常)。
结构体和异常Thrift结构体在概念上同C语言结构体类型—-一种将相关属性聚集(封装)在一起的方式。在面向对象语言中,thrift结构体被转换成类。
异常在语法和功能上类似于结构体,只不过异常使用关键字exception而不是struct关键字声明。但它在语义上不同于结构体—当定义一个RPC服务时,开发者可能需要声明一个远程方法抛出一个异常。
服务服务的定义方法在语法上等同于面向对象语言中定义接口。Thrift编译器会产生实现这些接口的client和server桩。
类型定义Thrift支持C/C++风格的typedef:
typedef i32 MyInteger   \\atypedef Tweet ReTweet  \\b说明:
  • 末尾没有逗号
  • struct可以使用typedef
枚举类型可以像C/C++那样定义枚举类型,如:
enum TweetType {    TWEET,       //a    RETWEET = 2, //b    DM = 0xa,  //c    REPLY}        //dstruct Tweet {    required i32 userId;    required string userName;    required string text;    optional Location loc;    optional TweetType tweetType = TweetType.TWEET // e    optional string language = "english"}说明:
  • 编译器默认从0开始赋值
  • 可以赋予某个常量某个整数
  • 允许常量是十六进制整数
  • 末尾没有逗号
  • 给常量赋缺省值时,使用常量的全称
注意,不同于protocol buffer,thrift不支持枚举类嵌套,枚举常量必须是32位的正整数
注释Thrfit支持shell注释风格,C/C++语言中单行或者多行注释风格
# This is a valid comment./** This is a multi-line comment.* Just like in C.*/// C++/Java style single-line comments work just as well.
返回列表