源码学习
文章平均质量分 82
felix_xw
https://felix1xuwei.github.io/
展开
-
Protobuf-Message相关类
类MessageLite所有message的接口类,从名字看是lite的message,普通message也是它的子类。 MessageLite适合“轻量级”的message(仅仅提供 encoding+序列化 功能,没有使用使用reflection和descriptors)。在确定可以使用“轻量级”的message的场景下,可以在.proto文件中如下增加配置(option optimi...原创 2018-06-01 14:53:20 · 10118 阅读 · 0 评论 -
Protobuf-Descriptor相关类
类Descriptor描述一种message类型(不是一个单独的message对象)的meta信息。构造函数是private类型,必须通过DescriptorPool(friend类)来构造。const的成员:const FileDescriptor* file_: 描述message所在的.proto文件信息const Descriptor* containing_type_...原创 2018-06-01 14:55:35 · 16071 阅读 · 0 评论 -
Protobuf-Unknown字段
待解决的问题:分布式系统中,各个模块接口之间proto文件在升级过程中,必然会存在版本不一致的情况。 unknown字段,用于解决proto文件升级过程中,在多级联关系的各个模块(特别是涉及路由功能模块传递数据时)接口之间proto版本不一致,而导致数据无法传递的问题。例如:之前在hy-new-router重构项目开发中,就遇到这样的问题。利用driver向asp发送消息,消息到...原创 2018-06-01 14:56:40 · 8486 阅读 · 0 评论 -
Protobuf-Reflection类
类Reflection接口类,提供方法来动态访问/修改message中的field的接口类。调用Message::GetReflection()获得messge对应的reflection。 这个类没有放到Message类中,是从效率角度考虑的。因为绝大多数message的实现共用同一套Reflection(GeneratedMessageReflection),并且一个Message所有的o...原创 2018-06-01 14:58:05 · 3559 阅读 · 0 评论 -
Protobuf-Compiler相关类&代码生成流程
代码生成流程:核心流程如下图所示:核心数据结构类CommandLineInterfacegenerators_: map<string, GeneratorInfo>,提供从”–cpp_out” -> CppGenerator的映射,从protoc参数中获取需要的generator的名称;plugins_:map<string, string...原创 2018-06-01 14:58:44 · 2519 阅读 · 0 评论 -
Protobuf-Plugin机制
plugin机制protobuf是一个支持plugin机制的序列化框架,除了protobuf自带的几种语言的CodeGenerator,用户可以按需实现自己的插件,来实现语言的拓展(比如protoc-gen-lua)或者功能的拓展(厂子内部的mcpack2pb插件)。 因为protoc插件需要实现跨平台、跨语言,所以采用的方式是父子进程的工作方式,父子进程通过pipe(父子进程共享fd)...原创 2018-06-01 14:59:14 · 5308 阅读 · 2 评论 -
Protobuf-源码中值得学习的地方
使用宏来提高代码可读性(代码的美感)例1.宏CHARACTER_CLASS定义tokenizer.cc文件中,需要判断某个character是属于哪种类型的字符,通过宏CHARACTER_CLASS来定义字符类型,并且定义static类型的InClass()接口来判断。 #define CHARACTER_CLASS(NAME, EXPRESSION) ...原创 2018-06-01 15:01:07 · 1755 阅读 · 1 评论