本文共 2587 字,大约阅读时间需要 8 分钟。
1.下载thrift包
2.安装依赖 sudo apt-get install automake bison flex g++ git libboost1.55-all-dev libevent-dev libssl-dev libtool make pkg-config 3.php语言依赖 sudo apt-get install … 4.ubuntu下安装 sudo apt-get install thrift-compiler 5.Thrift 是对 IDL(Interface Definition Language) 描述性语言的一种具体实现。数据类型:
基本类型: bool:布尔值,true 或 false,对应 Java 的 boolean byte:8 位有符号整数,对应 Java 的 byte i16:16 位有符号整数,对应 Java 的 short i32:32 位有符号整数,对应 Java 的 int i64:64 位有符号整数,对应 Java 的 long double:64 位浮点数,对应 Java 的 double string:未知编码文本或二进制字符串,对应 Java 的 String 结构体类型: struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean
struct RequestStruct { 1: i32 requestId 2: string requestData } struct ResponseStruct { 1: i32 responseId 2: string responseData } service ThriftSample //thrift与自定义代码的接口 { ResponseStruct SendReceive(1: RequestStruct request) string GetServerTime() }
容器类型: list:对应 Java 的 ArrayList set:对应 Java 的 HashSet map:对应 Java 的 HashMap 异常类型: exception:对应 Java 的 Exception 服务类型: service:对应服务的类
协议TProtocol :
在传输协议上总体划分为文本 (text) 和二进制 (binary) 传输协议,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数 TBinaryProtocol —— 二进制编码格式进行数据传输 TCompactProtocol —— 高效率的、密集的二进制编码格式进行数据传输 TJSONProtocol —— 使用 JSON 的数据编码协议进行数据传输 TSimpleJSONProtocol —— 只提供 JSON 只写的协议,适用于通过脚本语言解析 TDebugProtocol - Uses a human-readable text format to aid in debugging.传输层TTransport :
TSocket —— 使用阻塞式 I/O 进行传输,阻塞型socket,用于客户端,采用系统函数read和write进行读写数据;(BIO),是最常见的模式 TSSLSocke—— 继承TSocket,阻塞型socket, 用于客户端;采用openssl的接口进行读写数据。 THttpTransport:采用Http传输协议进行数据传输 TFileTransport – 以文件形式进行传输。 TMemoryTransport – 将内存用于I/O. java实现时内部实际使用了简单的ByteArrayOutputStream。 TZlibTransport – 使用zlib进行压缩, 与其他传输方式联合使用。当前无java实现 TFramedTransport —— 以frame为单位进行传输,使用非阻塞方式,按块的大小进行传输,类似于 Java 中的 NIO TFastFramedTransport 与TFramedTransport相比,始终使用相同的Buffer,提高了内存的使用率 TNonblockingTransport —— 使用非阻塞方式,用于构建异步客户端 TSaslClientTransport与TSaslServerTransport, 提供SSL校验服务端类型TServer :
TSimpleServer —— 单线程服务器端使用标准的阻塞式 I/O TThreadedServer – 多线程服务模型,使用阻塞式IO,每个请求创建一个线程。(java 不支持) TThreadPoolServer —— 多线程服务器端使用标准的阻塞式 I/O TThreadedSelectorServer 允许你用多个线程来处理网络I/O。它维护了两个线程池,一个用来处理网络I/O,另一个用来进行请求的处理 TNonblockingServer —— 多线程服务器端使用非阻塞式 I/O THsHaServer - 半同步半异步的服务模型,一个单独的线程用来处理网络I/O,一个worker线程池用来进行消息的处理Thrift优缺点总结
(1)相比SOAP,数据量更小,客户端开销小,但是通用性和可扩展性差,数据格式固定,更适合做静态数据交互 (2)相比其他RPC框架结构,Thrift支持的语言更多,支持更多的数据类型 (3)Thrift内嵌了完整RPC实现,PB在文档方面性能更好Thrift优缺点总结
附1.Thrift 架构
转载地址:http://ruadi.baihongyu.com/