C++ thrift详细教程 及和Protobuf对比

本文介绍了C++中Thrift的使用方法,包括.thrift文件格式、编译过程、序列化/反序列化,以及Thrift与Protobuf的区别。Thrift提供了丰富的Transport和Protocol类,支持多种服务器实现,方便客户端和服务端的开发。同时,文章对比了Thrift与Protobuf在无符号整型、容器支持、常量和typedef等方面的差异。
摘要由CSDN通过智能技术生成

最近同时用了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 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值