thrift----跨语言框架的魅力(c++,python)

本文介绍了在使用thrift-0.8.0版本时遇到的编译错误及解决方案,包括修改TBinaryProtocol.h和TDenseProtocol.h中的版本定义,以及在Makefile中添加编译选项。针对Python环境,指出需要修正服务器端参数和运行setup.py安装模块。还提到nonblockingserver的编译依赖libevent,以及thrift的限制,如不支持多重继承、输出参数和一个端口多个server。最后预告将探讨C++异步客户端支持和其他不常见用法。
摘要由CSDN通过智能技术生成

   thrift由fackbook开发交给apache监管后,已经被众人所熟悉,我要讲的就是thrift中的一些问题:

  1.当前的thrift-0.8.0版本存在很多问题,0.9正在众大神打patch中,相信不久就会release。

   由于thrift-0.8.0版本在gcc >4.6版本时,编译应用程序是会报VERSION_1、VERSION_2、VERSION_MASK 错误,因此需要修改
   1)、lib/cpp/src/protocol/TBinaryProtocol.h
    static const int32_t VERSION_MASK = 0xffff0000;
   static const int32_t VERSION_1 = 0x80010000;
    修改为:
   static const int32_t VERSION_MASK = ((int32_t)0xffff0000);
   static const int32_t VERSION_1 = ((int32_t)0x80010000);

   2)、lib/cpp/src/protocol/TDenseProtocol.h
   static const int32_t VERSION_MASK = 0xffff0000;
   static const int32_t VERSION_2 = 0x80020000;
   修改为:
   static const int32_t VERSION_MASK = ((int32_t)0xffff0000);
   static const int32_t VERSION_2 = ((int32_t)0x80020000);

  另外对于0.8的自带cpp例子,Makefile中需要加入编译选项-DHAVE_NETINET_IN_H ,并且需要将-lthrift编译选项放到最后,不然会编不过。python的自带例子server端的参数    有问题需要将9090改为port=9090

 

  2.对于thrift的nonblockingserver,需要在编译选项中加入-lthrift-lthriftnb–levent,不然会发生编译错误,用该server还得装libevent!

 

  3.若运行python的例子,出现no module named thrift.thrift,需在lib/python下运行python setup.py install.

  

  4.由于跨语言的原因,thrift不支持多重继承,不支持输出参数。默认参数虽然能编译通过,但底层生成代码并不支持。另外,thrift也不支持一个端口多个server的情形,虽然有人提交了java的patch,通过一个注册函数实现了这个方式,但thrift认为这种行为是不必要的,并没有将其纳入新的版本中。

 

  5.thrift支持完整的async机制,关于c++的异步客户端的支持我将在下篇博文中阐述清楚。另外关于一些不常见的用法我也将一一解释。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值