Thrift IDL 使用

Thrift IDL 使用

介绍

首先看一下维基百科额定义:

Thrift是一种接口描述语言和二进制通讯协议,[1]它被用来定义和创建跨语言的服务。[2]它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的跨平台高效服务,可以使用C#、C++(基于POSIX兼容系统[3])、Cappuccino、[4]Cocoa、Delphi、Erlang、Go、Haskell、Java、Node.js、OCaml、Perl、PHP、Python、Ruby和Smalltalk。[5]虽然它以前是由Facebook开发的,但它现在是Apache软件基金会的开源项目了。该实现被描述在2007年4月的一篇由Facebook发表的技术论文中,该论文现由Apache掌管。[6]

简单的来说就是一个跨语言的 RPC 框架,Thrift是一个典型的CS(客户端/服务端)结构,客户端和服务端可以使用不同的语言开发。既然客户端和服务端能使用不同的语言开发,那么一定就要有一种中间语言来关联客户端和服务端的语言,没错,这种语言就是IDL(Interface Description Language)。

所以这篇博客就主要介绍一下 Thrift IDL 语言。

类型

基本类型

类型名称 类型说明 备注
string 字符串类型
i16 16位整型
i32 32位整型
i64 64位整型
byte 8位字符类型
bool 布尔值
double 双精度浮点
void 空类型
map map类型 类似cpp,如:mapmp
set 集合类型 类似cpp ,如: sets
list 列表类型 定义一个 list 对象:listli

结构体(struct):

定义形式如下:

struct People {
     1: string name;
     2: i32 age;
     3: string sex;
}

约束:

1.struct不能继承,但是可以嵌套,不能嵌套自己。
2.其成员都是有明确类型
3.成员是被正整数编号过的,其中的编号使不能重复的,这个是为了在传输过程中编码使用。
4.成员分割符可以是逗号(,)或是分号(;),而且可以混用
5.字段会有optional和required之分和protobuf一样,但是如果不指定则为无类型–可以不填充该值,但是在序列化传输的时候也会序列化进去,optional是不填充则部序列化,required是必须填充也必须序列化。
6.每个字段可以设置默认值
7.同一文件可以定义多个struct,也可以定义在不同的文件,进行include引入。

枚举类型(enum):

定义形式如下:

enum Sex {
    MALE,
    FEMALE
}

异常(exception)

thrift支持自定义exception,规则和struct一样,如下:

exception RequestException {
    1: i32 code;
    2: string reason;
}

服务(service)

thrift定义服务相当于Java中创建Interface一样,创建的service经过代码生成命令之后就会生成客户端和服务端的框架代码。定义形式如下:

service HelloWordService {
     // service中定义的函数,相当于Java interface中定义的函数
     string doAction(1: string name, 2: i32 age);
 }

类型定义

Thrift的IDL支持C/C++中类似typedef的功能,例如:

typedef i32 Integer
typedef i64 Long

命名空间

命名空间就是 package 的意思,主要目的是组织代码,例如:

namespace go content.xxx
namespace py content.xxx

文件包含

thrift也支持文件包含,相当于C/C++中的include,Java中的import。使用关键字include定义,例 如:

include "global.thrift"

可选与必选

thrift提供两个关键字required,optional,分别用于表示对应的字段时必填的还是可选的。例如:

struct People {
    1: required string name;
    2: optional i32 age;
}

表示name是必填的,age是可选的。

参考资料

  1. Thrift的官方网站:http://thrift.apache.org/

  2. Thrift官方下载地址:http://thrift.apache.org/download

  3. Thrift官方的IDL示例文件(自己写IDL文件时可以此为参考):

    https://git-wip-us.apache.org/repos/asf?p=thrift.git;a=blob_plain;f=test/ThriftTest.thrift;hb=HEAD

  4. 各种环境下搭建Thrift的方法:http://thrift.apache.org/docs/install/

你可能感兴趣的:(【RPC框架】)