Thrift 的各项传输协议和Socket方式及各种Server的特性
(1).支持的传输格式
TBinaryProtocol 二进制格式
TCompactProtocol 压缩格式
TJSONProtocol JSON格式
TSimpleJSONProtocol 提供JSON只写协议,生成的文件很容易通过脚本语言解析
TDebugProtocol 使用易懂的可读的文本格式以便于debug
(2). 支持的数据传输方式
TSocket 阻塞式socket
THttpTransport
采用HTTP传输协议进行数据传输
TFramedTransport
以frame为单位传输,非阻塞式服务中使用
TFileTransport
以文件形式进行传输
TMemoryTransport
将内存用于I/0,
TZlibTransport
使用zlib进行压缩。
TBufferedTransport
对某个transport对象操作的数据进行buffer,即从buffer中读取数据进行传输,或将数据直接写入到buffer
(3). 支持的服务模型[主要是服务端类型]
TSimpleServer
简单的单线程服务模型,常用于测试
TThreadedServer
多线程服务模型使用标准的阻塞式IO,每个请求创建一个线程
TThreadPoolServer 多线程服务模型使用标准的阻塞式IO,预先创建一组线程处理请求
TNonblockingServer
多线程服务模型使用非阻塞IO(需要用TFramedTransport数据传输方式 )
ps:什么叫阻塞与非阻塞?
阻塞IO:socket的阻塞意味着必须要做完IO包括错误才会返回
非阻塞IO:无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功
在网络阻塞严重的时候,网络层没有足够的内存来进行写操作,这时候就会出现写不成功的情况,阻塞情况下会尽可能(有可能被中断)等待到数据全部发送完毕, 对于非阻塞的情况就是一次写多少算多少,没有中断的情况下也还是会出现write 到一部分的情况.