Thrift框架介绍(一)

thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发,它结合了功能强大的软件堆栈和代码生成引擎,以构建在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk、and OCaml这些编程语言的无缝结合的、搞笑的服务。

1、架构


thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在thrift描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提供服务)便可以了。其中protocol(协议层,定义数据传输格式,可以为二进制或者XML等)和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。

2、支持的数据传输格式、数据传输方式和服务模型

(1)支持的传输格式

           TBinaryProtocol-二进制格式

            TCompactProtocol-压缩格式

            TJSONProtocol-JSON格式

            TSimpleJSONProtocol-提供JSON只写协议,携程的文件很容易通过脚本语言解析

            TDebugProtocol-使用易懂的可读的文本格式,便于debug

(2)支持的数据传输格式

            TSocket-阻塞式socket

            TFramedTransport-以frame为单位进行传输,非阻塞式服务中使用

            TFileTransport-以文件形式进行传输

            TMemoryTransport-将内存用于I/O.java实现时内部实际使用了简单的ByteArrayOutoutStream

            TZlibTransport-使用zlib进行压缩,与其他传输方式联合使用。当前无.java实现

(3)支持的服务模型

            TSimpleServer-简单的单线程服务模型,常用于测试

            TThreadPoolServer-多线程服务模型,使用标准的阻塞式IO

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

转载自:http://dongxicheng.org/search-engine/thrift-framework-intro/点击打开链接

3、thrift中的类型(此部分转载自:https://mp.csdn.net/postedit/80041651点击打开链接)

thrift类型系统包括预定义基本类型,用户自定义结构体,容器类型,异常和服务定义

(1)基本类型

        bool:布尔类型(true or false),占一个字节

        byte:有符号字节

        i16:16位有符号整数

        i32:32位有符号整数

        i64:64位有符号整数

        double:64位浮点数

        string:未知编码或者二进制的字符串

注意,thrift不支持无符号整型,因为很多目标语言不存在无符号整型(如java).

(2)容器类型

        thrift容器与类型密切相关,它与当前流行编程语言提供的容器类型相对应,采用Java泛型风格表示的。thrift提供了三种容器类型:

        List<t1>:一系列t1类型的元素组成的有序表,元素可以重复

        Set<t1>:一系列t1类型的元素组成的无序表,元素唯一

        Map<t1,t2>:key/value对(key的类型是t1且key唯一,value类型是t2)。

容器中的元素类型可以是除了service以外的任何合法的thrift类型(包括结构体和异常)。

(3)结构体和异常

    thrift结构体在概念上同C语言结构体类型——一种相关属性聚集(封装)在一起的方式。在面向对象的语言中,thrift结构体被转换成类。

    异常在语法和功能上类似于结构体,只不过异常使用关键字exception而不是struct关键字声明。但它在语义上不同于结构体——当定义一个RPC服务时,开发者可能需要声明一个远程方法抛出一个异常。

(4)服务

    服务的定义方法在语法上等同于面向对象语言中定义接口。thrift编译器会产生实现这些接口的client和server桩。

(5)类型定义

        thrift支持C/C++风格的typedef

            typedef i32 MyInteger   \\a

            typedef Tweer ReTweet    \\b

说明:

            a:末尾没有逗号

            b:struct可以使用typedef









  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值