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客户端的协议层将数据按照协议格式进行解封装,然后得到具体的函数执行结果,并将其交付给调用函数;
-
数据传输协议
- TBinaryProtocol : 二进制格式.
- TCompactProtocol : 压缩格式
- TJSONProtocol : JSON格式
- TSimpleJSONProtocol : 提供JSON只写协议, 生成的文件很容易通过脚本语言解析
相关推荐
在本实例中,我们将关注一个基于Thrift的RPC调用实现,Thrift是由Facebook开发的一种高效的跨语言服务开发框架。 Thrift的核心思想是定义一种中间描述文件(.thrift),该文件包含了服务接口、数据结构以及服务间的...
Thrift RPC客户端的服务化框架代码主要涉及了两个关键概念:Thrift和RPC(Remote Procedure Call,远程过程调用)。Thrift是由Facebook开发的一种开源跨语言服务框架,它允许定义数据类型和服务接口,然后自动生成...
场景: 项目中有大量的rpc请求,请求的特点时间长。 解决方案: 使用GenericKeyedObjectPool,T>,T为TServiceClient,简单的说就是一个socket,Node是服务端的节点信息,包含ip和port,线程池中存的是每个服务节点作为...
Thrift是一种跨语言的服务...在Java和Python之间使用Thrift进行RPC调用,不仅降低了开发难度,还提高了系统的可维护性和可扩展性。通过理解Thrift的工作原理和实践示例,你可以更好地应用于自己的分布式系统设计中。
Thrift是由Facebook开发的一种跨语言的RPC框架,它通过定义服务接口和数据类型,自动生成各种编程语言的客户端和服务器端代码,使得开发者可以轻松地构建可扩展的网络服务。而workerman-thrift是基于PHP的工作人猿...
使用thrift、websocket在javascript和c++之间建立rpc调用机制。 如果要使用js+html来写界面,cpp来写底层业务逻辑,这就非常有用了。 当然,如果底层不用cpp来写,也可以参考本代码的js对thrift的rpc包装。
服务端通过实现生成的接口来提供服务,客户端则利用这些代码发起RPC调用。由于Thrift支持阻塞、非阻塞、单线程和多线程模式,它可以灵活地适应各种服务器环境,如Tomcat等。 Thrift 的优势在于其高效、简洁和跨语言...
以上就是Thrift在C++中实现远程调用的基本流程。这个"Thrift之C++远程调用helloworld菜鸟教程"将引导初学者一步步完成从定义服务接口到编写服务器和客户端代码的过程,从而理解Thrift在C++中的工作原理和使用方法。...
**RPC调用流程:** 1. **客户端调用**:客户端调用一个看起来像本地方法的接口,这个接口实际上被RPC框架拦截。 2. **构建请求**:RPC框架将方法名、参数等信息序列化成网络可传输的数据。 3. **网络传输**:数据...
通过学习这个示例,你可以理解Thrift的基本工作原理,包括定义服务接口、生成代码、实现服务逻辑、启动服务、创建客户端以及进行RPC调用。掌握这些知识后,你就能在自己的项目中灵活地应用Thrift,实现跨语言、跨...
- 客户端:发起RPC调用请求的程序,它定义了要调用的服务和参数。 - 服务端:提供被调用服务的程序,接收并处理客户端的请求。 - 通信协议:RPC框架负责将调用请求转化为网络数据包,通过网络发送到服务器,并将...
从浏览器中的javascript,网站或cordova / phonegap应用中对Thrift http服务器进行Thrift rpc调用。 这是一个grunt模块,可将Thrift IDL编译为commonjs javascript,以与browserify或webpack一起使用。 生成的...
在这个Java自制简单RPC调用例子中,我们看到项目结构包括三个模块:API、客户端(Client)和服务器端(Server),这些都是实现RPC的核心组成部分。 1. **API模块**: API模块定义了接口,这些接口是客户端和服务端...
RPC调用的流程通常包括以下步骤:客户端发起请求,服务器接收到请求后执行相应操作,然后将结果返回给客户端。这个过程对用户来说是透明的,就像调用本地函数一样简单。中间件在RPC中扮演着关键角色,它负责处理请求...
在描述中提到的“hellorpc”可能是一个示例项目,用于演示RPC调用的基本流程。它可能包含了客户端和服务端的代码,客户端发起请求,服务端处理请求并返回响应。通过查看和运行这个示例,你可以理解RPC调用的完整生命...
5. **序列化与反序列化(Serialization & Deserialization)**:RPC调用中,数据需要在网络中传输,因此需要将对象转换为字节流进行传输,到达目标后再反序列化恢复成对象。 JavaRpc框架通常会提供以下功能: - **...
- **生产消息**:调用Thrift服务的`produce`方法,传入主题名和消息列表,客户端会将这些消息包装成Thrift结构,通过RPC调用发送到Kafka服务端。 - **消费消息**:调用Thrift服务的`consume`方法,指定主题名和最大...
在IT行业中,RPC(Remote Procedure Call)是一种分布式计算技术,允许程序在不同的网络节点上进行通信,仿佛调用本地函数一样。Thrift是Facebook开源的一个跨语言的服务开发框架,它结合了序列化、网络通信和RPC...
Thrift RPC Server是一种高效的服务间通信框架,它由Facebook开源并广泛应用于跨语言服务调用。在本项目中,Thrift RPC Server是基于PHP的Swoole扩展构建的,这使得服务器性能得到显著提升,因为它利用了Swoole的...
**Apache RPC调用实例** Apache远程过程调用(Remote Procedure Call, RPC)是一种通信协议,允许网络上的一个程序调用另一个远程系统上的程序,并且看起来就像调用本地函数一样。在分布式系统中,RPC框架扮演着至...