Thrift | 青训营笔记

91 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天。

在做大作业过程中使用到了IDL,在此之前没接触过,在此对学习到的一些概念进行整理。

1. IDL

IDL是用来描述软件组件接口的一种计算机语言。IDL通过一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信交流;比如,一个组件用C++写成,另一个组件用Java写成。

IDL通常用于远程调用软件。 在这种情况下,一般是由远程客户终端调用不同操作系统上的对象组件,并且这些对象组件可能是由不同计算机语言编写的。IDL建立起了两个不同操作系统间通信的桥梁。

2. Thrift

Thrift采用IDL来定义通用的服务接口,thrift文件由thrift代码生成工具处理,生成各种目标语言的代码,以支持IDL文件中定义的结构和服务实现跨语言服务调用。在大作业中,使用hertz的命令行工具hz我们可以高效便捷地通过thrif文件生成对应的结构。

  • 基本类型
    thrift不支持无符号类型,因为很多编程语言不存在无符号类型,比如java,其支持类型如下:

    • byte: 有符号字节
    • i16: 16位有符号整数
    • i32: 32位有符号整数
    • i64: 64位有符号整数
    • double: 64位浮点数
    • string: 字符串
  • 结构体
    就像C语言一样,thrift也支持struct类型,目的就是将一些数据聚合在一起,方便传输管理。struct的定义形式如下:

    struct People { 
        1: string name; 
        2: i32 age; 
        3: string sex; 
    }
    
  • 服务
    thrift定义服务相当于创建通信的接口,创建的service经过代码生成命令之后就会生成客户端和服务端的框架代码。定义形式如下:

    service HelloWordService { 
        string doAction(1: string name, 2: i32 age); 
    }
    
  • 命名空间

    thrift的命名空间相当于go中的package的意思,主要目的是组织代码。thrift使用关键字namespace定义命名空间,例如:

    namespace go user_gorm
    

    格式是:namespace 语言名 路径,末尾不能有分号。