美文网首页
Thrift简介及使用

Thrift简介及使用

作者: 第七感_12d9 | 来源:发表于2017-11-05 23:14 被阅读0次

    一、简介

    1.Thrift是一种典型的CS(客户端/服务端)结构,客户端与服务端可以使用不同的语言开发。既然客户端和服务端能使用不同的语言开发,那么一定就要有一种之间语言来管理客户端和服务端的语言,这种语言就是IDL(Interface Description Language).

    2.Thrift不支持无符号类型,因为很多语言不存在无符号类型,比如Java

    3.集合中的元素可以是除了service之外的任何类型,包括exception

    thrift容器类型:

    (1)list:一系列由T类型的数据组成的有序列表,元素可以重复

    (2)set:一系列由T类型的数据组成的无序列表,元素不可重复

    (3)map:一个字典结构,key为K类型,value为V类型,相当于Java中的HashMap

    4.thrift定义服务相当于Java中创建Interface一样,关键字service

    typedef定义别名

    const定义常量

    namespace相当于Java的package,namespace 语言 路径

    include引入包

    #和//开头为注释,/**/包裹的也是注释

    required必选,optional可选

    5.thrift传输协议

    (1)TBinaryProtocal:二进制格式

    (2)TCompactProtocal:压缩格式,比TBinaryProtocal效率更高

    (3)TJSONProtocal:JSON格式

    (4)TSimpleJSONProtocal:提供JSON只写协议,生成的文件很容易通过脚本语言解析,极少使用,缺少元数据

    (5)TDebugProtocal:使用易懂的可读的文本格式,以便于debug

    6.thrift传输方式

    (1)TSocket:阻塞式socket,效率低,使用少

    (2)TFramedTransport:以frame为单位进行压缩,非阻塞式服务中使用

    (3)TFileTransport:以文件形式进行传输

    (4)TMemoryTransport:将内存用于I/O,java实现时内部实际使用了简单的ByteArrayOutputStream

    (5)TZlibTransport:使用zlib进行压缩,与其他传输方式联合使用,当前无java实现

    7.thrift支持的服务模型:

    (1)TSimpleServer:简单的单线程服务模型,常用于测试

    (2)TThreadPoolServer:多线程服务模型,使用标准的阻塞式IO,来一个请求起一个线程

    (3)TNonblockingServer:多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)

    (4)THsHaServer:继承自TNonblockingServer,THsHa引入了线程池去处理,其模型把读写任务放到线程池去处理;Half-sync/Half-async的处理模式,Half-async是在处理IO事件上(accept/read/write IO),Half-sync用于handler对rpc的同步处理(需使用TFramedTransport数据传输方式)

    二、使用

    相关文章

      网友评论

          本文标题:Thrift简介及使用

          本文链接:https://www.haomeiwen.com/subject/jvfkmxtx.html