Thrift RPC

通俗讲,RPC通过把网络通讯抽象为远程的过程调用,调用远程的过程就像调用本地的子程序一样方便,从而屏蔽了通讯复杂性,使开发人员可以无需关注网络编程的细节

概括的说,RPC就是在一台机器上调用另一台机器上的方法,这种调用在远程机器上对代码的执行就像在本机上对代码的执行一样,只是迁移了一个执行环境而已。

RPC是一种C/S架构的服务模型,server端提供接口供client调用,client端向server端发送数据,server端接收client端的数据进行相关计算并将结果返回给client端。

为了实现上述RPC步骤,许多RPC工具被研发出来。这些RPC工具大多使用“接口描述语言” —— interface description language (IDL) 来提供跨平台跨语言的服务调用。

接口描述语言接口定义语言IDL ) 允许用一种语言编写的程序或对象与用未知语言编写的另一种程序进行通信。IDL以独立于语言的方式描述接口,使不共享一种语言的软件组件之间能够进行通信,例如,用C++编写的组件和用Java编写的组件之间的通信。

在日常开发中通常有两种形式来使用RPC,一种是团队内部完全实现RPC的6个步骤,自己序列化数据,然后自己利用socket或者http传输数据,最常见的就是游戏开发了。另一种就是利用现成的RPC工具,这些RPC工具实现了底层的数据通信,开发人员只需要利用IDL定义实现自己的服务即可而不用关心数据是如何通信的,最常见的RPC工具是Facebook开源的Thrift RPC框架。

Thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提供服务)便可以了。

Thrift架构图如下:

图中黄色部分是用户的业务代码,褐色部分是编译工具生成的代码框架,紫色部分和蓝色部分是我们所选择的传输层和传输协议。 
Thrift服务器包含用于绑定协议和传输层的基础架构,它提供阻塞、非阻塞、单线程和多线程的模式运行在服务器上。

  1. 传输协议 
    Thrift可以让用户选择客户端和服务端之间的传输通信协议的类别,分为文本(text)和二进制(binary)。 
    • TBinaryProtocol:二进制编码格式进行数据传输
    • TCompactProtocol:高效率的密集的二进制编码协议
    • TJSONProtocol:使用Json的数据编码协议
    • TSimpleJSONProtocol:只提供Json读写的协议,适用于脚本语言解析
  2. 传输层 
    • TSocket:使用阻塞式IO进行传输
    • TFramedTransport:非阻塞方式,按块的大小进行传输,类似NIO;服务器必须为非阻塞的服务类型
    • TNonblockingTransport:非阻塞模式,用于构建异步客户端
  3. 服务端类型 
    • TSimpleServer:单线程服务器,阻塞IO
    • TThreadPoolServer:多线程服务器,阻塞式IO
    • TNonblockingServer:多线程服务器,非阻塞IO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值