众所周知,协议与编解码是网络连接最为关键的部分。通过传输协议与编解码,才能保证网络两端的设备正常交互。并且定义合理的协议以及正确的编解码方式,能够大大的提高网络数据传输的效率。这里,我们从Thrift源码层面看一下它的协议与编解码:
image.png
由上可知:
Thrift支持的协议有:Json,SimpleJson,Binary,Compact Binary
Thrift通过TProtocol抽象类,定义了协议和编解码的顶层接口。同样,关联了一个TTransport传输对象,另外定义了一系列读写消息的编解码接口:
image.png
协议其实就是通过客户端和服务器端约定传输什么数据,如何解析数据。对于RPC框架来说,传入的最重要数据就是方法名,方法参数,返回的数据就是返回码,返回数据。
image.png
writeMessageBegin:TBinaryProtocol传输消息头的数据顺序:name(方法名),type(方法类型),seqid(消息序列号)。
image.png
writeFieldBegin:传输字段数据。
同样,读取数据时,也会按照写入的数据执行。
通过Thrift自动生成java代码, 在写数据时,会依次调用上边各个方法:
image.png
综上所述,我们可以知道Thrift在协议与编解码层如何对一个rpc请求做的数据编解码,数据传输,以及数据读取。