当你从客户端接收到一串序列化后的数据,你需要
- 修改其中某一个标签的值,然后把它传递到真正的业务数据,这样每个业务模块(微服务)就不需要和公共授权服务打交道了。
- 因为传递的数据的长度,类型甚至是新的字段的新增的造成不稳定,因此 network->originBytes - > Marshal() -> Object -> Unmarshal()->newBytes->Logic Service 会造成很大的损耗
因此设想是否考虑一个优化方式: network->originBytes -> Modify()->newBytes->Logic Service
设计到的操作可能有:修改Tag对应值,删除Tag对应值,新增Tag对应值
挑战在于:
- 需要对ProtoBuffer的编码熟知(本文不提,自行查阅相关资料),当然也可以直接从Proto库拷贝代码出来使用
- ProtoBuffer的类型值是变长的 int64(1024*1024*1024) 和 int64(1024)编码后的长度不是相同的,因此不能单纯地在原来的[]byte进行修改。
本文不考虑一些复杂类型的修改,仅修改基本的类型,假设你有一个Message
message SubMsg {
uint32 un32 = 1;
}
message MyMsg {
string str = 1;
int32 n32 = 2;
float64 f64 = 3;
repeated int64 n64 = 4;
SubMsg subMessage = 5;
}
// 未完待续
原文地址:https://www.cnblogs.com/lvhuatblog/p/9023150.html
时间: 2024-11-05 18:50:41