proto的message序列化函数实现

本文主要介绍proto的message序列化函数实现,并以RedisRequest为例介绍brpc中序列化函数实现。
1.SerializeToString是Message父类MessageLite的函数,它会调用SerializeWithCachedSizes
不同协议的序列化方式可能不同。
(1)对于proto而言,SerializeWithCachedSizes没有在子类单独定义,调用的是MessageLite的SerializeWithCachedSizes

MessageLite的SerializeWithCachedSizes会调用每一个具体的proto子类的_InternalSerialize函数,比如这个Impression proto

(2)另外,例如对于Message子类Brpc::RedisRequest而言,SerializeWithCachedSizes有单独定义,且实现上只打了日志,没有对指针赋值,没有做任何处理,日志也说了不支持。

2.SerializeTo是Brpc::RedisRequest单独提供的函数,实现上是拷贝的io_buf,它是Brpc::RedisRequest自己存放redis协议的序列化结果的结构。

参考:
https://protobuf.dev/reference/cpp/api-docs/google.protobuf.message_lite/
brpc源码

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部