09-Thrift高级3

来源:互联网 发布:vr软件看不了 编辑:程序博客网 时间:2024/06/05 02:22

总纲

从这一篇开始,学习和讲解Thrift一些细节性的东西。

Thrift定义

参考 Url
首先,Thrift编译的命令:thrift -r -o . -out . --gen go *.thrift
其中,语言对照表如下(或者查看help):
thrift_lan

// 命名空间namespace java test_java_package  namespace py test_python_package ....// 服务定义  service YourName{    string test(1: i32 num,2: string name) }// 基本数据类型 bool          布尔值, 占1个字节i8            有符号整数,占1个字节i16           有符号整数,占2个字节i32           有符号整数,占4个字节i64           有符号整数,占8个字节double     浮点数,占8个字节string       字符串binary       二进制大对象(python里对应的是string类型,java里对应的是ByteBuffer等)map<t1,t2>  mapparam 键值对,t1,t2 代指其他类型list<t1>  listparam 列表,t1代指其他类型set<t1>  setparam 散列集,t1代指其他类型// 常量和枚举const i32 TESTNAME = 120  enum TestEnum {      A = 1,      B = 2  }// 别名 typedef i32 MyInteger// 结构体  // 每一个结构体会单独生成一个类。每个变量可以附上默认值(如t1类型)。字段前可加 optional 标记,表示该字段在没有赋值的情况,不会被序列化。注意,每定义一个字段,数字标识符需要递增(如以上的1:i32 t1=0 中的1:) struct TestStruct{      1:i32 t1 = 0,      2:string t2,      optional string t3  } // 文件包含// 注意,引用其他thrift文件的结构体等信息的时候,要加前缀。比如A.thrift文件中有结构体 T1,在B文件中引用A的T1的信息时,需要携程 A.T1,否则无法自动生成codeinclude "test.thrift"// 继承service A{      void f1(1:i32 num)  }service B extends A{      void f2(1:string str)  }// 异常exception IException {    1: i32 num,    2: string msg  } // 使用的时候抛出定义的异常即可  void f() throws (1:IException ex)  // 注释方法1. /* xxxx  */2. # asdasdas3. // sssss// 异步方法 // 加上关键字oneway,异步方法,返回值必须是voidservice A{      oneway void f()  }
原创粉丝点击