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

Thrift架构介绍(3)

Thrift架构介绍(3)

命名空间Thrift中的命名空间同C++中的namespace和java中的package类似,它们均提供了一种组织(隔离)代码的方式。因为每种语言均有自己的命名空间定义方式(如python中有module),thrift允许开发者针对特定语言定义namespace:
namespace cpp com.example.project  // anamespace java com.example.project // b说明:
  • 转化成namespace com { namespace example { namespace project {
  • 转换成package com.example.project
文件包含Thrift允许thrift文件包含,用户需要使用thrift文件名作为前缀访问被包含的对象,如:
include "tweet.thrift"           // a...struct TweetSearchResult {    list<tweet.Tweet> tweets; // b}说明:
  • thrift文件名要用双引号包含,末尾没有逗号或者分号
  • 注意tweet前缀
常量Thrift允许用户定义常量,复杂的类型和结构体可使用JSON形式表示。
const i32 INT_CONST = 1234;    // aconst map<string,string> MAP_CONST = {"hello": "world", "goodnight": "moon"}说明:分号是可选的,可有可无;支持十六进制赋值。
定义结构体结构体由一系列域组成,每个域有唯一整数标识符,类型,名字和可选的缺省参数组成。如:
struct Tweet {    required i32 userId;                  // a    required string userName;             // b    required string text;    optional Location loc;                // c    optional string language = "english" // d}struct Location {                            // e    required double latitude;    required double longitude;}说明:
  • 每个域有一个唯一的,正整数标识符
  • 每个域可以标识为required或者optional(也可以不注明)
  • 结构体可以包含其他结构体
  • 域可以有缺省值
  • 一个thrift中可定义多个结构体,并存在引用关系
规范的struct定义中的每个域均会使用required或者optional关键字进行标识。如果required标识的域没有赋值,thrift将给予提示。如果optional标识的域没有赋值,该域将不会被序列化传输。如果某个optional标识域有缺省值而用户没有重新赋值,则该域的值一直为缺省值。
与service不同,结构体不支持继承,即,一个结构体不能继承另一个结构体。
返回列表