Thrift IDL 使用

Thrift IDL 使用

介绍

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

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

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

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

类型

基本类型

类型名称类型说明备注
string字符串类型
i1616位整型
i3232位整型
i6464位整型
byte8位字符类型
bool布尔值
double双精度浮点
void空类型
mapmap类型类似cpp,如:map<i32,i32>mp
set集合类型类似cpp ,如: set<i32>s
list列表类型定义一个 list 对象:list<i32>li

结构体(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/

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页