最近同时用了thrift和protobuf,进行通信传输。之前已写过关于protobuf的一篇博文,具体请点击:http://blog.csdn.net/zsk4232000/article/details/50300201 ,现在就总结一下thrift的编写,并与protobuf进行一些比较。没有进行深入的研究,只描述一下我用thrift的流程与方法。
thrift本身封装了一些通讯的库,支持完整的client/server RPC框架,所以用thrift编写网络通讯会非常方便,而且支持const、typedef等,所以比较流行用thrift进行网络通讯协议的编写。
1. .thrift文件格式
company.thrift 代码:
namespace cpp com.company.project
enum HOBBY
{
RUNNING = 0,
BADMINTION = 1,
PINGPONG = 3,
}
struct Person
{
1:required string name;
2:required i32 age ;
3:required string home;
4:optional HOBBY hobby = HOBBY.RUNNING;
}
enum FIELD
{
IT = 0,
MECHINE = 1,
SECURITY = 2,
}
struct Company
{
1:required list<Person> staff;
2:required FIELD field;
3:required i32 staff_num;
4:optional i32 rank = 1;
}
service TCompanyService
{
Person GetStaffInfo(1:i32 index)
void PrintAllStaffName(1:list<Person> staffs)
}
注意点:
- 命令空间的格式:
namespace cpp com.company.project //a
namespace java com.company.project //b
a : 为C++语言格式的命令空间,转化成namespace com { namespace company{ namespace project {
b : 为java语言格式的命令空间,转化成package com.example.project
- 不可以将嵌套写法,即不能将结构体或者枚举体写在其他结构体内,如下为错误写法:
struct Person
{
1:required string name;
2:required i32 age ;
3:required string home;
enum HOBBY
{
RUNNING = 0,
BADMINTION =