跨平台-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 

 

猜你喜欢

转载自mengxs.iteye.com/blog/1454406
今日推荐