RPC协议学习手记:thrift

Posted 歪鼻子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC协议学习手记:thrift相关的知识,希望对你有一定的参考价值。

1.Hello World

安装相关依赖包

sudo yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel -y

下载Thrift的软件包,并解压缩:

http://archive.apache.org/dist/thrift/

找一个自己喜欢的版本就行了

配置、编译、安装Thrift,如下所示:

sudo ./configure
sudo make
sudo make install

校验安装

thrift -version

尝试一下hello world

namespace py example
struct Data{
  1:string text
}
service format_data{
  Data do_format(1:Data data),
}

生成一下

thrift -out .. --gen go example.thrift

生成的语法是

thrift -out <catalog> --gen <language> <Thrift filename>

2.基础语法的了解

需要注意的:

  • 函数的参数要用数字依序标好,序号从1开始,形式为:“序号:参数名”;

  • 每个函数的最后要加上“,”,最后一个函数不加;


  • 可以使用/……/添加注释

常用数据类型

  • i16, 16位整形类型,例如:i16 aI16Val;

  • i32,32位整形类型,对应C/C++/java中的int类型;例如:  I32  aIntVal

  • i64,64位整形,对应C/C++/java中的long类型;例如:I64 aLongVal

  • byte,8位的字符类型,对应C/C++中的char,java中的byte类型;例如:byte aByteVal

  • bool, 布尔类型,对应C/C++中的bool,java中的boolean类型;例如:bool aBoolVal

  • double,双精度浮点类型,对应C/C++/java中的double类型;例如:double aDoubleVal

  • void,空类型,对应C/C++/java中的void类型;该类型主要用作函数的返回值,例如:void testVoid()

  • string, 字符串类型,注意是全部小写形式;例如:string aString

  • map,map类型,例如,定义一个map对象:map<i32, i32> newmap

  • set,集合类型,例如,定义set 对象:set aSet

  • list,链表类型,例如,定义一个list 对象:list aList

  • enum, 枚举类型

    enum Numberz
    {
      ONE = 1,
      TWO,
      THREE,
      FIVE = 5,
      SIX,
      EIGHT = 8
    }
  • struct,自定义结构体类型

    struct TestV1 {
           1: i64 id,
           3string username,
           12: i16 age
    }

3.thrift开发流程

  • 设计所需要的服务

  • 根据设计的服务,编写thrift文件

  • 根据编写的thrift文件使用thrift提供的代码生成工具生成服务端与客户端的代码

  • 实现服务端业务逻辑的编写,同时实现客户端调用代码的编写

  • 运行服务端与客户端

4.thrift调用流程图



以上是关于RPC协议学习手记:thrift的主要内容,如果未能解决你的问题,请参考以下文章

thrift 是rpc协议

RPC远程协议之Thrift入门

Windows 上的 Thrift / Google 协议缓冲区

HBase Thrift协议编程入门教程

RPC框架之Thrift架构及源码解读

HTTP与RPC(Thrift)