RPC框架之Thrift—实现Go和Java远程过程调用

      最后更新:2022-03-06 13:37:34 手机定位技术交流文章

      官网:https://thrift.apache.org/

      1 概览

      我们把他换成自己容易理解的方式:
      在这里插入图片描述

      2 分层解析

      2.1 Transport(传输层)

      传输层为网络的读写提供了一个简单的抽象。这使得Thrift能够将底层传输与系统的其他部分解耦(例如,序列化/反序列化)。

      接口支持的方法:

      • open
      • close
      • read
      • write
      • flush

      可传输的底层协议:

      • 文件传输(I/O)
      • HTTP

      2.2 Protocol(协议层)

      协议层抽象定义了一种机制来将内存中的数据结构映射到连线格式。换句话说,协议指定数据类型如何使用底层的Transport对自己进行编码/解码。因此,协议实现控制编码方案并负责(反)序列化。这种意义上的协议的一些例子包括JSON、XML、纯文本、压缩二进制文件等。

      接口支持的方法:

      写(编码)方法:

      • writeMessageBegin(name, type, seq)
      • writeMessageEnd()
      • writeStructBegin(name)
      • writeStructEnd()
      • writeFieldBegin(name, type, id)
      • writeFieldEnd()
      • writeFieldStop()
      • writeMapBegin(ktype, vtype, size)
      • writeMapEnd()
      • writeListBegin(etype, size)
      • writeListEnd()
      • writeSetBegin(etype, size)
      • writeSetEnd()
      • writeBool(bool)
      • writeByte(byte)
      • writeI16(i16)
      • writeI32(i32)
      • writeI64(i64)
      • writeDouble(double)
      • writeString(string)

      读(解码)方法:

      • name, type, seq = readMessageBegin()
        readMessageEnd()
      • name = readStructBegin()
        readStructEnd()
      • name, type, id = readFieldBegin()
        readFieldEnd()
      • k, v, size = readMapBegin()
        readMapEnd()
      • etype, size = readListBegin()
        readListEnd()
      • etype, size = readSetBegin()
        readSetEnd()
      • bool = readBool()
      • byte = readByte()
      • i16 = readI16()
      • i32 = readI32()
      • i64 = readI64()
      • double = readDouble()
      • string = readString()

      支持的编码协议:

      • 二进制

      • compact

      • json

      2.3 Processor(处理器层)

      处理器封装了从输入流读取数据和向输出流写入数据的能力。输入和输出流由Protocol对象表示。

      接口方法样例:

      2.4 Server(应用服务层)

      一个服务器集合了上面描述的所有不同的特性:

      • 创建一个运输
      • 为传输创建输入/输出协议
      • 创建基于输入/输出协议的处理器
      • 等待传入的连接,并将它们交给处理器

      3 thrift安装

      下载页:https://thrift.apache.org/download

      下载Windows版本:
      在这里插入图片描述
      下载后可以直接使用,或者放在固定文件设置环境变量
      在这里插入图片描述

      4 Go使用thrift

      4.1 项目结构和依赖安装

      在这里插入图片描述
      依赖安装:

      4.2 编写thrift文件并编译

      编译:

      4.3 服务端代码

      4.4 客户端代码

      4.5 验证

      在这里插入图片描述

      5 Java使用thrift

      5.1 项目结构和依赖

      在这里插入图片描述
      依赖:

      5.2 编写thrift文件并编译

      编译:

      注意:编译完成之后需要将生成的.java文件放到项目结构中的对应位置。

      5.3 服务端代码

      5.4 客户端代码

      6 使用thrift进行Java和Go的远程通信

      • 原则:客户端与服务端的协议一致即可

      例如Java做客户端:

      参考文章:

      https://thrift.apache.org/docs/concepts.html

      https://thrift.apache.org/docs/concepts.html

      https://blog.csdn.net/pengpengzhou/article/details/114841347

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/19596.html

          热门文章

          文章分类