• Thrift入门及Java实例演示


    目录:

    • 概述
    • 下载配置
    • 基本概念
      1. 数据类型
      2. 服务端编码基本步骤
      3. 客户端编码基本步骤
      4. 数据传输协议
    • 实例演示(java)
      1.  thrift生成代码
      2.  实现接口Iface
      3. TSimpleServer服务模型
      4. TThreadPoolServer 服务模型
      5. TNonblockingServer 服务模型
      6. THsHaServer服务模型
      7. 异步客户端

    [一]、概述

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

    Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。

    官网地址:thrift.apache.org

    推荐值得一看的文章:

    [二]、下载配置

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

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

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

    [三]、基本概念

    1.数据类型

    • 基本类型:
      • bool:布尔值,true 或 false,对应 Java 的 boolean
      • byte:8 位有符号整数,对应 Java 的 byte
      • i16:16 位有符号整数,对应 Java 的 short
      • i32:32 位有符号整数,对应 Java 的 int
      • i64:64 位有符号整数,对应 Java 的 long
      • double:64 位浮点数,对应 Java 的 double
      • string:utf-8编码的字符串,对应 Java 的 String
    • 结构体类型:
      • struct:定义公共的对象,类似于 C 语言中的结构体定义,在 Java 中是一个 JavaBean
    • 容器类型:
      • list:对应 Java 的 ArrayList
      • set:对应 Java 的 HashSet
      • map:对应 Java 的 HashMap
    • 异常类型:
      • exception:对应 Java 的 Exception
    • 服务类型:
      • service:对应服务的类

    2.服务端编码基本步骤:

    • 实现服务处理接口impl
    • 创建TProcessor
    • 创建TServerTransport
    • 创建TProtocol
    • 创建TServer
    • 启动Server

    3.客户端编码基本步骤:

    • 创建Transport
    • 创建TProtocol
    • 基于TTransport和TProtocol创建 Client
    • 调用Client的相应方法

    4.数据传输协议

    • TBinaryProtocol : 二进制格式.
    • TCompactProtocol : 压缩格式
    • TJSONProtocol : JSON格式
    • TSimpleJSONProtocol : 提供JSON只写协议, 生成的文件很容易通过脚本语言解析

    tips:客户端和服务端的协议要一致

    [四]、实例演示

    1. thrift生成代码

    创建Thrift文件:G: est hriftdemoHello.thrift ,内容如下:

    目录结构如下:

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

    生成后的目录结构如下:

    将生成的HelloWorldService.java 文件copy到自己测试的工程中,我的工程是用maven构建的,故在pom.xml中增加如下内容:

    2. 实现接口Iface

    java代码:HelloWorldImpl.java

    3.TSimpleServer服务端

    简单的单线程服务模型,一般用于测试。

    编写服务端server代码:HelloServerDemo.java

    编写客户端Client代码:HelloClientDemo.java

    先运行服务端程序,日志如下:

    再运行客户端调用程序,日志如下:

    测试成功,和预期的返回信息一致。

    4.TThreadPoolServer 服务模型

    线程池服务模型,使用标准的阻塞式IO,预先创建一组线程处理请求。

    编写服务端代码:HelloServerDemo.java

    客户端Client代码和之前的一样,只要数据传输的协议一致即可,客户端测试成功,结果如下:

    5.TNonblockingServer 服务模型

    使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。

    编写服务端代码:HelloServerDemo.java

    编写客户端代码:HelloClientDemo.java

    客户端的测试成功,结果如下:

    6.THsHaServer服务模型

    半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。

    编写服务端代码:HelloServerDemo.java

    客户端代码和上面 4 中的类似,只要注意传输协议一致以及指定传输方式为TFramedTransport。

    7.异步客户端

    编写服务端代码:HelloServerDemo.java

    编写客户端Client代码:HelloAsynClientDemo.java

    先运行服务程序,再运行客户端程序,测试结果如下:

  • 相关阅读:
    开通第一天,以此随笔作为纪念
    Apache 基于IP访问网站
    命令解释
    vi总结
    RAID
    Windows虚拟机安装
    CentOS虚拟机安装
    通过挂载系统光盘搭建本地yum仓库的方法
    VMware workstation 的安装
    Linux下关于vi命令的详细解说
  • 原文地址:https://www.cnblogs.com/exmyth/p/13731960.html
Copyright © 2020-2023  润新知