跨平台-thrift

thrift 是什么?

    Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml.

   thrift 支持现有现在的主流语言,由facebook开源出来的一个跨平台的通信工具。



thrift更多信息(建议看官网wiki)

     可以参考thrift官方wiki:http://wiki.apache.org/thrift/

     thrift基础学习:http://dongxicheng.org/search-engine/thrift-guide/

 

     在thrift官方wiki中我们可以找到自己想要的东东,thrift IDL 、代码生成,client端开发,server端 开发等等


附件中附带thrift代码生成工具,具体使用 可以 使用 thrift-0.6.1.exe --help 查看帮助,如 简单的生成java代码命令:

thrift -r --gen java tutorial.thrift 


thrift bug

           在使用thrift进行跨平台数据通信时会遇到一些问题,在此总结一下几条望大家注意:

1.跨语言数据通信反序列化失败

  java,c++ 使用thrift进行通信时,如果我们在java和c++平台之间传输的是 一个class序列化后的字符串(使用thrift的序列化api),如c++作为服务器端,java作为客户端,使用java接收c++传过来的class序列化字符串后,java将字符串反序列化,会出现反序列化失败的情况,但命名接收到了字符串,这时请在c++端将序列化后的字符串进行BASE64编码,java接收到base64编码的字符串后,将其base64字符串反编码形成的char数组进行thrift反序列化到class中即可解决跨语言的数据通信问题


2.thrift使用过程中的通信异常

   在thrift通信过程中,如频繁报类似:“Cannot read. Remote side has closed. Tried to read 1 bytes, but only got 0 bytes”的错误,很有可能是由于thrift版本导致到,无论是客户端还是服务器端请使用最高版本的thrift。这个bug在官网有记录:https://issues.apache.org/jira/browse/THRIFT-517 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值