zoukankan      html  css  js  c++  java
  • Apache Thrift的简单介绍

    1.什么是Thrift

    thrift是一种可伸缩的跨语言服务的发展软件框架。它结合了功能强大的软件堆栈的代码生成引擎,以建设服务。不同开发语言开发的服务可以通过该框架实现通信。
    thrift是facebook开发的,创造thrift是为了解决facebook系统中各系统间大数据量的传 输通信以及系统之间语言环境不同需要跨平台的特性。所 以thrift可以支持多种程序语言,例如:  C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多种不同的语言之间通信thrift可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务。Thrift通过接口定义语言 (interface definition language,IDL) 来定义数据类型和服务,Thrift接口定义文件由Thrift代码编译器生成thrift目标语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。
    以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。简而言之,开发者只需准备一份thrift脚本,通过thrift code generator(像gcc那样输入一个命令)就能生成所要求的开发语言代码

    2.thrift怎么工作?

      >>> 定义thrift的文件 ,由thrift文件(IDL)生成 双方语言的接口、model ,在生成的model以及接口中会有解码编码的代码 。
      >>>thrift   文件例子
         thrift-0.7.0.exe   -r   -gen  java    TestThrift.thrift    生成java 代码
         thrift-0.7.0.exe   -r   -gen  php    TestThrift.thrift    生成php代码
         thrift-0.7.0.exe   -r   -gen  py       TestThrift.thrift    生成python代码
         thrift-0.7.0.exe   -r   -gen  as3     TestThrift.thrift    生成as3代码
         thrift-0.7.0.exe   -r   -gen  cpp     TestThrift.thrift    生成C++代码。

    3.Thrift协议栈以及各层的使用


    model   interface
           服务的调用接口以及接口参数model、返回值model
    Tprotocol    协议层
             将数据(model)编码 、解码 。
    Ttransport 传输层
            编码后的数据传输(简单socket、http)
    Tserver
            服务的Tserver
    类型,实现了几种rpc调用(单线程、多线程、非阻塞IO)

     协议:

    Thrift 可以让用户选择客户端与服务端之间传输通信协议的类别,在传输协议上总体划分为文本 (text) 和二进制 (binary) 传输协议,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数,有时还会使用基于文本类型的协议,这需要根据项目 产品中的实际需求。常用协议有以下几种:

           TBinaryProtocol —— 二进制编码格式进行数据传输

    使用方法如清单 3 和清单 4 所示。

           TCompactProtocol —— 高效率的、密集的二进制编码格式进行数据传输

    构建 TCompactProtocol 协议的服务器和客户端只需替换清单 3 和清单 4 中 TBinaryProtocol 协议部分即可

           TJSONProtocol —— 使用 JSON 的数据编码协议进行数据传输 构建 TJSONProtocol 协议的服务器和客户端只需替换清单 3 和清单 4 中 TBinaryProtocol 协议部分即可

           TSimpleJSONProtocol —— 只提供 JSON 只写的协议,适用于通过脚本语言解析

        传输层:

           TSocket —— 使用阻塞式 I/O 进行传输,是最常见的模式

    使用方法如清单 4 所示。

           TFramedTransport —— 使用非阻塞方式,按块的大小进行传输,类似于 Java 中的 NIO

    若使用 TFramedTransport 传输层,其服务器必须修改为非阻塞的服务类型,

  • 相关阅读:
    kafka的概念
    java的多线程:java安全问题产生的原因与JMM的关系
    java的多线程:线程安全问题
    web自动化之键盘操作
    获取cookie里面的sessionid
    Python连接mysql数据库
    Python 发送Email
    Python日志模块
    openxl模块从excel里面读取数据
    Python读取配置文件
  • 原文地址:https://www.cnblogs.com/cocos2014/p/4225705.html
Copyright © 2011-2022 走看看