我正在寻找一种将对象的序列化值 (byte[]) 添加到协议缓冲区消息中的重复字段的方法。
我有一个应用程序将数据项以序列化形式保存在 memcached 中,并且需要将它们传递给远程客户端。客户端通过提供密钥列表来请求数据项,服务器发回数据项列表。数据项的内容对服务器来说并不重要;它不需要知道其中包含什么,它只需要知道它们的密钥。
当前的方法是从 memcached 中获取项目,对其进行反序列化,将它们添加到响应中的数据项列表中,将响应序列化为字节数组并通过套接字发送。这不是最优的,因为我们反序列化数据项只是为了让它们在下一步中再次序列化。两种序列化(用于 memcached 和用于输出)都是使用协议缓冲区完成的。理想情况下,我们可以在从 memcached 获取数据后跳过反序列化,并将序列化的值添加到响应中。我查看了 protobuf-net 和 protobuf-csharp 并没有找到实现此目的的方法。是否可以?我忽略了什么吗?
以下是原型定义(简化):
message Request {
required int32 messageId;
repeated string keys;
}
message DataItem {
required string key = 1;
required ValueType type = 2; // the type of the value, enumeration
optional int32 intValue = 3;
optional int64 longValue = 4;
optional double doubleValue = 5;
optional float floatValue = 6;
optional bool boolValue = 7;
optional string stringValue = 8;
}
message Response {
required int32 messageId;
repeated DataItem dataItems;
}