• Thrift框架介绍


    1、前言

    Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。

     
    2、架构

    Thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提服务)便可以了。其中protocol(协议层, 定义数据传输格式,可以为二进制或者XML等)和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。
     
    3、 支持的数据传输格式、数据传输方式和服务模型
    (1)支持的传输格式
    TBinaryProtocol – 二进制格式.
    TCompactProtocol – 压缩格式
    TJSONProtocol – JSON格式
    TSimpleJSONProtocol –提供JSON只写协议, 生成的文件很容易通过脚本语言解析。
    TDebugProtocol – 使用易懂的可读的文本格式,以便于debug
    (2) 支持的数据传输方式
    TSocket -阻塞式socker
    TFramedTransport – 以frame为单位进行传输,非阻塞式服务中使用。
    TFileTransport – 以文件形式进行传输。
    TMemoryTransport – 将内存用于I/O. java实现时内部实际使用了简单的ByteArrayOutputStream。
    TZlibTransport – 使用zlib进行压缩, 与其他传输方式联合使用。当前无java实现。
    (3)支持的服务模型
    TSimpleServer – 简单的单线程服务模型,常用于测试
    TThreadPoolServer – 多线程服务模型,使用标准的阻塞式IO。
    TNonblockingServer – 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)
     
     
    4、 Thrift安装与部署
     
    4.1Thrift安装

    到官网下载最新版本,截止今日(2012-06-11)最新版本为0.8.0.

    1. 如果是Maven构建项目的,直接在pom.xml 中添加如下内容:

     
    <dependency>
      <groupId>org.apache.thrift</groupId>
      <artifactId>libthrift</artifactId>
      <version>0.8.0</version>
    </dependency>

    2.如果自己编译lib包,把下载的压缩包解压到X:盘,然后在X: hrift-0.8.0libjava 目录下运行ant进行自动编译,会在X: hrift-0.8.0libjavauild 目录下看到编译好的lib包:libthrift-0.8.0.jar

     利用Thrift部署服务的主要流程:编写服务说明保存到.thrift文件,根据需要 编译.thrift文件,生成相应的语言源代码,根据实际需要编写client端和server端代码。
     
    4.2Thrift部署

    thrift-0.8.0.exe 是官网提供的windows下编译工具,运用这个工具生成相关代码:

     生成源代码的命令:
          要生成java代码:thrift-0.8.0.exe -r -gen java ./demo.thrift,结果代码存放在gen-java目录下
     
    client端和sever端代码要调用编译.thrift生成的中间文件。
    在client端,用户自定义CalculatorClient类型的对象(用户在.thrift文件中声明的服务名称是Calculator, 则生成的中间代码中的主类为CalculatorClient), 该对象中封装了各种服务,可以直接调用(如client.ping()), 然后thrift会通过封装的rpc调用server端同名的函数。
    在server端,需要实现在.thrift文件中声明的服务中的所有功能,以便处理client发过来的请求。
     
    参考资料: http://dongxicheng.org/search-engine/thrift-framework-intro/
  • 相关阅读:
    php数组转换成js可用的数组的两种方式
    常用正则表达式--------------[拿把小刀,强大自己]
    AngularJs 相应回车事件
    常见的关系型数据库和非关系型数据库及其区别
    CMDB资产采集
    GB和GiB的区别
    python枚举详解
    python保留两位小数
    详解TCP三握四挥
    npm run dev 和 npm run serve
  • 原文地址:https://www.cnblogs.com/pdca/p/4454555.html
Copyright © 2020-2023  润新知