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,中间件)