###about thrift----the apache thrift software framework, for scalable cross-language services development, 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, ocaml and delphi and other languages.总体而言,就是开源的、跨平台的、无缝连接的开源框架。一般用于系统内个语言之间的rpc通信。[源代码位置](https://git-wip-us.apache.org/repos/asf/thrift)###为什么产生了thrift---- 目前主流的数据传输格式: xml与json相比体积太大,但是xml传统,也不算复杂。 json 体积较小,新颖,但不够完善。 thrift 体积超小,使用起来比较麻烦,不如前两者轻便,但是对于 1.高并发 2.数据传输量大 3.多语言环境 满足其中2点使用 thrift还是值得的。 和其他协议对比(引用自https://www.liuhe36.cn/2013/07/introduction-of-thrift/): 其实有很多技术能支撑远程调用,如常见的rest-json方式、rest-xml或rmi等,但rest方式的效率上确实不够高,下面引用了几张图片,可以直观的说明一些问题。 使用thrift和其他方式的所产生的内容大小比较结果如下:](http://https://www.liuhe36.cn/wp-content/uploads/2013/07/thrift-size.png 在这里输入图片标题)](https://www.liuhe36.cn/wp-content/uploads/2013/07/thrift-size.png 在这里输入图片标题) 在上图中我们能明显看出,最臃肿的是rmi,其次是xml,使用thrift的tcompactprotocol协议和google 的 protocol buffers 相差的不算太多,相比而言还是google 的 protocol buffers效果最佳。 使用thrift 中的协议和其他方式的所产生的运行开销比较结果如下:](https://www.liuhe36.cn/wp-content/uploads/2013/07/thrift-load.png 在这里输入图片标题) 在上图中我们能明显看出,最占资源是rest2中协议,使用thrift的tcompactprotocol协议和google 的 protocol buffers 相差的不算太多,相比而言thrift的tcompactprotocol协议效果最佳。###数据类型####基本类型: bool:布尔值,true 或 false,对应 java 的 boolean php bool byte:8 位有符号整数,对应 java 的 byte php int i16:16 位有符号整数,对应 java 的 short php int i32:32 位有符号整数,对应 java 的 int php int i64:64 位有符号整数,对应 java 的 long php int double:64 位浮点数,对应 java 的 double php double string:未知编码文本或二进制字符串,对应 java 的 string php string####结构体类型: struct:定义公共的对象,类似于 c 语言中的结构体定义,在 java 中是一个 javabean,在php里是一个类####容器类型: list:对应 java 的 arraylist php array set:对应 java 的 hashset php array map:对应 java 的 hashmap php array####异常类型: exception:对应 java 的 exception php 的 exception####服务类型: service:对应服务的类