以上是创建server和client的stack。最上面的是IDL,然后生成Client和Processor。红色的是发送的数据。protocol和transport 是Thrift运行库的一部分。
通过Thrift 你只需要关心服务的定义,而不需要关心protocol和transport。
Thrift允许你选择 protocol ,transport和server。因为Thrift 最早是有C++开发的,Thrift在C++实现中有最大的变化。
Thrift支持 text 和 binary protocols,binary protocols要比text protocols,但是有时候 text protocols比较有用(例如:调试的时候)。支持的协议有:
TBinaryProtocol -直接的二进制格式
TCompactProtocol 效率和高压缩编码数据
TDenseProtocoal 和TCompactProtocol相似,但是省略了meta信息,从哪里发送的,增加了receiver。还在实验中,java实现还不可用。
TJSONProtocoal 使用JSON
TSImpleJSONProtocoal 只写的protocol使用JSON。适合被脚本语言转化
TDebugProtocoal 使用人类可读的text 格式 帮助调试
上面的protocol 说明了 什么被传送,Thrift transports 说明了怎样传送。支持的transport:
TSocket 使用 blocking socket I/O
TFramedTransport 以帧的形式发送,每帧前面是一个长度。要求服务器来non-blocking server
TFileTransport 写到文件。没有包括在java实现中。
TMemoryTransport 使用内存 I/O 。java实现中在内部使用了ByteArrayOutputStream
TZlibTransport 压缩 使用zlib。在java实现中还不可用
最后,thrift 提供了servers:
TSimpleServer 单线程 server,使用标准的blocking IO。用于测试
TThreadPoolServer 多线程 使用标准的blocking IO
TNonblockingServer 多线程 使用 non-blocking IO (java实现中使用了NIO channels)。TFramedTransport必须使用在这个服务器。
一个server只允许定义一个接口服务。这样的话多个接口需要多个server。这样会带来资源的浪费。同意通过继承接口的方式。
创建服务
1创建user.thrift