`

thirft rpc 具体调用流程

阅读更多

Thrift调用过程中,Thrift客户端和服务器之间主要用到传输层类、协议层类和处理类三个主要的核心类,这三个类的相互协作共同完成rpc的整个调用过程。在调用过程中将按照以下顺序进行协同工作:

        (1)     将客户端程序调用的函数名和参数传递给协议层(TProtocol),协议层将函数名和参数按照协议格式进行封装,然后封装的结果交给下层的传输层。此处需要注意:要与Thrift服务器程序所使用的协议类型一样,否则Thrift服务器程序便无法在其协议层进行数据解析;

        (2)     传输层(TTransport)将协议层传递过来的数据进行处理,例如传输层的实现类TFramedTransport就是将数据封装成帧的形式,即“数据长度+数据内容”,然后将处理之后的数据通过网络发送给Thrift服务器;此处也需要注意:要与Thrift服务器程序所采用的传输层的实现类一致,否则Thrift的传输层也无法将数据进行逆向的处理;

        (3)     Thrift服务器通过传输层(TTransport)接收网络上传输过来的调用请求数据,然后将接收到的数据进行逆向的处理,例如传输层的实现类TFramedTransport就是将“数据长度+数据内容”形式的网络数据,转成只有数据内容的形式,然后再交付给Thrift服务器的协议类(TProtocol);

        (4)     Thrift服务端的协议类(TProtocol)将传输层处理之后的数据按照协议进行解封装,并将解封装之后的数据交个Processor类进行处理;

        (5)     Thrift服务端的Processor类根据协议层(TProtocol)解析的结果,按照函数名找到函数名所对应的函数对象;

        (6)     Thrift服务端使用传过来的参数调用这个找到的函数对象;

        (7)     Thrift服务端将函数对象执行的结果交给协议层;

        (8)     Thrift服务器端的协议层将函数的执行结果进行协议封装;

        (9)     Thrift服务器端的传输层将协议层封装的结果进行处理,例如封装成帧,然后发送给Thrift客户端程序;

        (10)    Thrift客户端程序的传输层将收到的网络结果进行逆向处理,得到实际的协议数据;

        (11)    Thrift客户端的协议层将数据按照协议格式进行解封装,然后得到具体的函数执行结果,并将其交付给调用函数;

 

  1. 数据传输协议
    1. TBinaryProtocol : 二进制格式.
    2. TCompactProtocol : 压缩格式
    3. TJSONProtocol : JSON格式
    4. TSimpleJSONProtocol : 提供JSON只写协议, 生成的文件很容易通过脚本语言解析
分享到:
评论

相关推荐

    基于thrift的RPC调用实例

    在本实例中,我们将关注一个基于Thrift的RPC调用实现,Thrift是由Facebook开发的一种高效的跨语言服务开发框架。 Thrift的核心思想是定义一种中间描述文件(.thrift),该文件包含了服务接口、数据结构以及服务间的...

    Thrift RPC客户端的服务化框架代码

    Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...

    thrift客户端rpc调用demo

    场景: 项目中有大量的rpc请求,请求的特点时间长。 解决方案: 使用GenericKeyedObjectPool,T>,T为TServiceClient,简单的说就是一个socket,Node是服务端的节点信息,包含ip和port,线程池中存的是每个服务节点作为...

    Thrift中实现Java与Python的RPC互相调用示例代码.rar

    Thrift是一种跨语言的服务...在Java和Python之间使用Thrift进行RPC调用,不仅降低了开发难度,还提高了系统的可维护性和可扩展性。通过理解Thrift的工作原理和实践示例,你可以更好地应用于自己的分布式系统设计中。

    workerman-thrift, Thrift RPC for php based on workerman..zip

    Thrift是由Facebook开发的一种跨语言的RPC框架,它通过定义服务接口和数据类型,自动生成各种编程语言的客户端和服务器端代码,使得开发者可以轻松地构建可扩展的网络服务。而workerman-thrift是基于PHP的工作人猿...

    使用thrift、websocket在javascript和cpp之间建立rpc调用

    使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。

    基于Thrift框架RPC的研究与实现_田翠珍.pdf

    服务端通过实现生成的接口来提供服务,客户端则利用这些代码发起RPC调用。由于Thrift支持阻塞、非阻塞、单线程和多线程模式,它可以灵活地适应各种服务器环境,如Tomcat等。 Thrift 的优势在于其高效、简洁和跨语言...

    rpc远程调用使用说明&源码

    **RPC调用流程:** 1. **客户端调用**:客户端调用一个看起来像本地方法的接口,这个接口实际上被RPC框架拦截。 2. **构建请求**:RPC框架将方法名、参数等信息序列化成网络可传输的数据。 3. **网络传输**:数据...

    Thrift简单调用demo代码

    通过学习这个示例,你可以理解Thrift的基本工作原理,包括定义服务接口、生成代码、实现服务逻辑、启动服务、创建客户端以及进行RPC调用。掌握这些知识后,你就能在自己的项目中灵活地应用Thrift,实现跨语言、跨...

    RPC(远程过程调用)

    - 客户端:发起RPC调用请求的程序,它定义了要调用的服务和参数。 - 服务端:提供被调用服务的程序,接收并处理客户端的请求。 - 通信协议:RPC框架负责将调用请求转化为网络数据包,通过网络发送到服务器,并将...

    grunt-angularjs-thrift:使用grunt将Thrift IDL编译为javascript,为每个Thrift服务生成一个angularjs服务,并为每个Thrift rpc调用返回一个Promise

    从浏览器中的javascript,网站或cordova / phonegap应用中对Thrift http服务器进行Thrift rpc调用。 这是一个grunt模块,可将Thrift IDL编译为commonjs javascript,以与browserify或webpack一起使用。 生成的...

    java自制简单RPC调用例子

    在这个Java自制简单RPC调用例子中,我们看到项目结构包括三个模块:API、客户端(Client)和服务器端(Server),这些都是实现RPC的核心组成部分。 1. **API模块**: API模块定义了接口,这些接口是客户端和服务端...

    rpc远程调用实例,包含源代码以及实验报告

    RPC调用的流程通常包括以下步骤:客户端发起请求,服务器接收到请求后执行相应操作,然后将结果返回给客户端。这个过程对用户来说是透明的,就像调用本地函数一样简单。中间件在RPC中扮演着关键角色,它负责处理请求...

    rpc调用的一个demo

    在描述中提到的“hellorpc”可能是一个示例项目,用于演示RPC调用的基本流程。它可能包含了客户端和服务端的代码,客户端发起请求,服务端处理请求并返回响应。通过查看和运行这个示例,你可以理解RPC调用的完整生命...

    thrift-rpc-server:基于swoole的Thrift RPC Server

    Thrift RPC Server是一种高效的服务间通信框架,它由Facebook开源并广泛应用于跨语言服务调用。在本项目中,Thrift RPC Server是基于PHP的Swoole扩展构建的,这使得服务器性能得到显著提升,因为它利用了Swoole的...

    JavaRpc服务调用示例RpcDemo.zip

    5. **序列化与反序列化(Serialization & Deserialization)**:RPC调用中,数据需要在网络中传输,因此需要将对象转换为字节流进行传输,到达目标后再反序列化恢复成对象。 JavaRpc框架通常会提供以下功能: - **...

    thrift-rpc-client

    - **生产消息**:调用Thrift服务的`produce`方法,传入主题名和消息列表,客户端会将这些消息包装成Thrift结构,通过RPC调用发送到Kafka服务端。 - **消费消息**:调用Thrift服务的`consume`方法,指定主题名和最大...

    Java中使用Thrift实现RPC示例代码.rar

    在IT行业中,RPC(Remote Procedure Call)是一种分布式计算技术,允许程序在不同的网络节点上进行通信,仿佛调用本地函数一样。Thrift是Facebook开源的一个跨语言的服务开发框架,它结合了序列化、网络通信和RPC...

    Apache RPC调用实例

    **Apache RPC调用实例** Apache远程过程调用(Remote Procedure Call, RPC)是一种通信协议,允许网络上的一个程序调用另一个远程系统上的程序,并且看起来就像调用本地函数一样。在分布式系统中,RPC框架扮演着至...

    基于thrift的rpc框架,在thrift基础上增加负载均衡,连接池,性能监控.zip

    在IT行业中,RPC(Remote Procedure Call)框架是分布式系统中常用的一种通信机制,它使得一个程序可以在不关心远程调用细节的情况下,像调用本地函数一样调用远程服务。Thrift是由Facebook开源的一个高性能、可扩展...

Global site tag (gtag.js) - Google Analytics