欢迎来到天天文库
浏览记录
ID:30505202
大小:16.43 KB
页数:4页
时间:2018-12-30
《thrift之protocol源码分析》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解Thrift之Protocol源码分析之前写过两篇关于Thrift的相关文章。Thrift源码剖析Thrift异步IO服务器源码分析也算是对Thrift比较熟悉,不过对Thrift里面的Protocol部分还是黑盒使用。虽然大概能猜到具体实现方式,但是还是忍不住花了一点点时间把具体代码实现翻出来看看。主要是为了满足一下好奇心。简单搞了一个Thrift的描述文件Insight.thrift作为例子。structPerso
2、n{1:stringname,2:i32age,3:optionalstringaddress,}serviceInsight{PersonHello(1:Personperson),PersonHi(1:Personp1,2:Personp2),}然后通过毕竟Thrift其实就是干RPC的活,所以看源码就按着RPC远程调用的顺序来看就行。从Hello函数调用开始,InsightClient::Hello对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基
3、本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解可以看出,在每次RPC调用的时候,会先将函数名通过writeMessageBegin("Hello",::apache::thrift::protocol::T_CALL,cseqid)先发送过去。这个过程的序列化协议很简单,直接就是传输的函数名字符串。然后再发送参数。发送参数的时候,会将所有参数作为一个struct发送InsightHellopargs,所以协议的序列化过程主要都是体现在struct的序列化上面。比如像Hi函数的参数序列化过程:
4、uint32_tInsight_Hi_pargs::write(::apache::thrift::protocol::TProtocoloprot)const{uint32_txfer=0;xfer+=oprot->writeStructBegin("Insight_Hi_pargs");xfer+=oprot->writeFieldBegin("p1",::apache::thrift::protocol::T_STRUCT,1);xfer+=((this->p1)).write(oprot);xfer+=oprot->writeFieldEnd();
5、xfer+=oprot->writeFieldBegin("p2",::apache::thrift::protocol::T_STRUCT,2);对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解xfer+=((this->p2)).write(oprot);xfer+=oprot->writeFieldEnd();xfer+=oprot->
6、writeFieldStop();xfer+=oprot->writeStructEnd();returnxfer;}整个对象的序列化过程主要是依赖了接口TProtocol的函数。对于实现TProtocol接口的序列化实现主要是以下三种(在thrift-0.9.0/lib/cpp/src/thrift/protocol里):TBinaryProtocolTCompactProtocolTJSONProtocol要了解协议序列化过程主要看一下TBinaryProtocol和TCompactProtocol就够了。主要是如下几个关键点:其实writeStruc
7、tStruct和writeStructEnd啥屁事也不用做。其实writeFieldBegin只有后两个参数有用,第二个参数是类型,第三个参数是ID,因为光靠这两者就可以在反序列化(读取解析)的时候知道是哪个成员了。structwrite对党的认识也有了进一步的提高。才真正体会到了中国共产党的伟大、光荣和正确,更感到只有中国共产党是全中国最广大人民利益的忠实代表我真正系统地接触和学习党的基本知识是在这次中级党校的培训班上。通过学习,了解了党的发展历程,对党的性质、宗旨、任务等基本知识有了进一步的了解的过程其实是个递归的过程,也就是在write函数中,会递归
8、的调用结构体本身每个成员的write函数。TCompactProt
此文档下载收益归作者所有