zoukankan      html  css  js  c++  java
  • Apache Thrift系列(一):Thrift基本及IDL语法

    一、Thrift介绍

      Thrift是一个轻量级、跨语言的远程服务调用框架,最初由Facebook开发,后面进入Apache开源项目。主要包含三大部分:代码生成序列化框架RPC框架,相当于protoc + protobuffer + grpc,并且支持大量语言(C++、Go、JavaPythonPHPRuby等),是一套全栈式的RPC解决方案。整体架构图:

    二、Thrift的数据类型及IDL语法

     thrift支持数据类型

    基本类型:

    • bool: 布尔值
    • byte: 8位有符号整数
    • i16: 16位有符号整数
    • i32: 32位有符号整数
    • i64: 64位有符号整数
    • double: 64位浮点数
    • string: UTF-8编码的字符串
    • binary: 二进制串

    结构体类型:

    • struct: 定义的结构体对象

    容器类型:

    • list: 有序元素列表
    • set: 无序无重复元素集合
    • map: 有序的key/value集合

    异常类型:

    • exception: 异常类型

    服务类型:

    • service: 具体对应服务的类

    除此之外,Thrift 还支持枚举类型(enum)和常量类型(const)

    IDL语法参考:

    三、通讯协议及序列化协议

      Thrift可以让用户选择客户端服务端之间传输通信协议的类别,在传输协议上总体划分为文本(text)和二进制(binary)传输协议,主要有BinaryProtocol、CompactProtocol、JsonProtocol、MultiplexedProtocol,一般实现RPC最常用协议BinaryProtocol和CompactProtocol。常用协议有以下几种:

    • TBinaryProtocol:二进制编码格式进行数据传输
    • TCompactProtocol:高效率的、密集二进制编码格式进行数据传输
    • TJSONProtocol: 使用JSON文本的数据编码协议进行数据传输
    • TSimpleJSONProtocol:只提供JSON只写的协议,适用于通过脚本语言解析
     上面是RPC通讯协议,序列化协议Thrift实现主要是Binary、Compact、JSON,可以理解通讯协议里面包含了序列化协议。
     
     

     四、Thrift 网络栈

    Thrift 网络栈主要包含四部分:
    • Server
      • 创建 transport
      • 为 transport 创建一个输入/输出 protocol
      • 基于 输入/输出 protocol 创建一个 processor
      • 等待连接并处理
    • Processor
      • 从输入流读取数据并写到输出流
    • Protocol
      • 协议层可以理解为主要负责序列化和反序列化,是与 Proto Buf 可类比的层
      • 常用的有 binary、compact:
    • Transport
      • 通常使用基于 Raw TCP 的传输协议,包括 Buffered 和 Framed 的;
      • 一般包含打开链接、关闭链接、读写数据、监听链接等接口和功能;
  • 相关阅读:
    传递闭包+求概率——列项相消法lightoj1321好题
    TSP+期望——lightoj1287记忆化搜索,好题!
    高斯消元+期望dp——light1151
    异或前缀和,组合数学——cf1054D
    数论GCD——cf1055C
    字符串哈希——1056E
    区间dp——cf1025D二叉搜索树的中序遍历好题!
    集合划分——cf1028D思维题
    线性dp——求01串最大连续个数不超过k的方案数,cf1027E 好题!
    java_and_tomcat_set_environment
  • 原文地址:https://www.cnblogs.com/-wenli/p/15088124.html
Copyright © 2011-2022 走看看