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

   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++的异步客户端的支持我将在下篇博文中阐述清楚。另外关于一些不常见的用法我也将一一解释。

你可能感兴趣的:(框架,python,语言,c++,框架,makefile)