RPC 全称 Remote Procedure Call——远程过程调用。RPC技术简单说就是为了解决远程调用服务 的一种技术,使得调用者像调用本地服务一样方便透明

Thrift的定义

  Thrift是一个轻量级、跨语言的RPC框架,主要用于各个服务之间的RPC通信,最初由Facebook于2007 年开发,2008年进入Apache开源项目。它通过自身的IDL中间语言, 并借助代码生成引擎生成各种主流语言的RPC服务端/客户端模板代码。Thrift支持多种不同的编程语言,包括C++, Java, Python, PHP, Ruby, Erlang, Haskell, C#, Cocoa, Javascript, Node.js, Smalltalk, OCaml, Golang等

Thrift的架构

​  Thrift技术栈分层从下向上分别为:传输层(Transport Layer)、协议层(Protocol Layer)、处理层(Processor Layer)和服务层(Server Layer)。

层级 作用
Transport Layer 负责直接从网络中读取和写入数据,它定义了具体的网络传输协议,比如TCP/IP。
Protocol Layer 协议层定义了数据传输格式,负责网络传输数据的序列化和反序列化; 比如说JSON、XML、二进制数据等。
Processor Layer 处理层是由具体的IDL(接口描述语言)生成的,封装了具体的底层网 络传输和序列化方式,并委托给用户实现的Handler进行处理。
Server Layer 整合上述组件,提供具体的网络IO模型(单线程/多线程/事件驱动),形成 最终的服务。

针对采用TCP/IP作为更底层的通信协议,整个通信过程如下图:

Thrift的特性

1、开发速度快: 通过编写RPC接口Thrift IDL文件,利用编译生成器自动生成服务端骨架(Skeletons)和客户端桩(Stubs)。 从而省去开发者自定义和维护接口编解码、消息传输、服务器多线程模型等基础工作。服务端:只需要按照服务骨架即接口,编写好具体的业务处理程序(Handler)即实现类即可。 客户端:只需要拷贝IDL定义好的客户端桩和服务对象,然后就像调用本地对象的方法一样调用远端服务。

2、接口维护简单:通过维护Thrift格式的IDL(接口描述语言)文件(注意写好注释),即可作为给Client使用的接口文档 使用,也自动生成接口代码,始终保持代码和文档的一致性。且Thrift协议可灵活支持接口的可扩展性。

3、学习成本低:因为其来自Google Protobuf开发团队,所以其IDL文件风格类似Google Protobuf,且更加易读易懂; 特别是RPC服务接口的风格就像写一个面向对象的Class一样简单。

4、跨语言支持:Thrift支持C++、 Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、 Node.js、Smalltalk等多种语言,即可生成上述语言的服务器端和客户端程序。

5、稳定:Facebook中有广泛使用,国内包括百度、美团小米、和饿了么等公司都在广泛使用。

Thrift的协议

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

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

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

  • TJSONProtocol: 使用JSON文本的数据编码协议进行数据传输

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

Mac下Python跨语言调用测试

以Apache官网提供的测试代码为例子

1、安装HomeBrew

Mac下的包管理工具

# 安装homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

中途需要Press RETURN to continue,输入系统密码等操作就完成了安装。
Homebrew安装成功后,会自动创建目录/usr/local/Cellar 来存放Homebrew安装的程序,并在 /usr/local/bin中创建符号链接。在终端就可以使用 brew 命令了。

2、安装Thirft
brew install thrift
3、编译器编译.thrift文件,生成python代码

下载IDL文件 生成python代码

# 首先使用pip命令安装thirft包
pip3 install thirft# 生成python代码
thirft -gen py filename.thirft
4、编写服务端代码
# 核心代码# func
handler = CalculatorHandler()
processor = Calculator.Processor(handler)
# transport  server IP Port
transport = TSocket.TServerSocket(host='127.0.0.1', port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)print('Starting the server...')
server.serve()
print('done.')
5、编写Client端代码
# Make socket
transport = TSocket.TSocket('localhost', 9090)# Buffering is critical. Raw sockets are very slow
transport = TTransport.TBufferedTransport(transport)# Wrap in a protocol
protocol = TBinaryProtocol.TBinaryProtocol(transport)# Create a client to use the protocol encoder
client = Calculator.Client(protocol)# Connect!
transport.open()# get server Ping func
res = client.ping()
print(res)

6、开启服务

# python3 client.py
# python3 server.py

然后我们的PRC架构就搭建完成了!

调用远程的方法

  同样的,我们需要拿到IDL文件,生成python代码,然后编写Server端代码,就可以调用远程的方法了,主要的就是我们要获取到 IP,PORT,以及参数等信息就可以完成调用了!

跨语言rpc框架Thrift相关推荐

  1. 跨语言RPC框架Thrift详解

    一. 概念 Apache的Thrift软件框架,是用来进行可伸缩的.跨语言的服务开发,它通过一个代码生成引擎来构建高效.无缝的服务,这些服务能够实现跨语言调度,目前支持的语言有: C++, Java, ...

  2. server如何调用 thrift_一文带你了解 Thrift,一个可伸缩的跨语言 RPC 框架(pinpoint 源码分析系列)...

    Thrift 是什么研究分布式调用链工具pinpoint的时候,在源码里看到了Thrift相关的代码,所以来了兴趣,想研究研究这个框架.Thrift 目前是 Apache 的一个项目,但是它是由fac ...

  3. 跨语言RPC框架Hessian、Thrift、Protocol Buffer之间的选择

    为什么80%的码农都做不了架构师?>>>    总结在几者之间选择的考量: 1. 如果你不需要很多语言相互调用, 希望保持清晰的java接口代码(无任何业务不相关的接口继承和方法,属 ...

  4. windows下rpc框架thrift的环境配置

    windows下rpc框架thrift的环境配置 引用链接: https://www.cnblogs.com/49er/p/7193829.html 最近在弄windows下 的Facebook的rp ...

  5. SpringBoot整合Grpc实现跨语言RPC通讯

    什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行.它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查 ...

  6. SpringBoot整合RPC框架---Thrift

    文章目录 什么是Thrift 架构 支持的通讯协议 支持的传输协议 支持的服务模型 Thrift的优点 SpringBoot整合Thrift 为什么会出现RPC框架 常见的RPC框架集成套路 开撸 官 ...

  7. Go语言 - RPC框架

    1.什么是RPC RPC - Remote Procedure Calls 远程函数调用 相当于本地将参数上传到云端,云端根据形参计算返回结果,并返还给本地. 2.RPC需要解决的问题 函数映射 数据 ...

  8. rpc框架都有哪些_这六种微服务RPC框架,你知道几个?

    开源 RPC 框架有哪些呢? 一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的. 跟语言平台绑定的开源 RPC 框架主要有下面几种. Dubbo:国内最早开源的 RPC 框架,由阿里巴 ...

  9. 开源 RPC 框架有哪些呢?

    开源 RPC 框架有哪些呢? 一类是跟某种特定语言平台绑定的,另一类是与语言无关即跨语言平台的. 跟语言平台绑定的开源 RPC 框架主要有下面几种. Dubbo:国内最早开源的 RPC 框架,由阿里巴 ...

最新文章

  1. 戴尔全面进军一体机市场【我眼中的戴尔转型】
  2. 全场灭灯_海天黄豆酱《新相亲大会2》首遇滑铁卢,男嘉宾险遭全场灭灯
  3. Windows 下各种Python库的下载与安装
  4. Java中<? super T>和List<? extends T>的区别
  5. 为什么c语言软件调试不出来,急急急……求指导,程序调试不出来
  6. 高通:预计未来几年向苹果公司出售的芯片将减少
  7. linux 下 libpcap 简单使用
  8. ActiveMQ从入门到精通(二)
  9. c语言,指针与数组--指针与二维数组2
  10. Three.js 学习笔记 - 给跳一跳小游戏添加光源,阴影
  11. python中debug和run有什么区别_android应用程序开发中run和debug 有什么区别?
  12. javac编译java_使用javac编译java文件
  13. html日历修改,HTML精美日历插件
  14. 为什么我偏爱用GitHub来写书?
  15. 计算机专业学习自然辩证法,深度学习 自然辩证法
  16. netlink(2)- rtnetlink
  17. 去BAT,你应该要看一看的面试经验总结
  18. 什么样的知识付费系统功能,更有利于平台与讲师发展?
  19. UI设计培训技术教程之字体排版规则
  20. 第五章 spring-context之LifecycleProcessor( 生命周期 )

热门文章

  1. mysql压缩包安装设置密码
  2. flex 移动开发 html5,[ html5 ] 移动端适配方案 flex布局+rem布局
  3. 幻灯片自动播放的实现
  4. 3ds max中的对象绕局部坐标系旋转的动画
  5. 辉芒微FT61F022A
  6. MySQL5.7官方下载链接导航
  7. Google Analytics中的 direct, organic search, referral
  8. 用python绘制熊猫图案_python – 熊猫:如何在彼此之上绘制年度数据
  9. 基于android系统的单词学习软件设计与开发【附项目源码+论文说明】分享
  10. 大牛教你怎么学习Java多进程,下载量瞬秒百万