我正在尋找一種將協議緩衝區中的重複字段的序列化的值(字節[])添加到協議緩衝區信息。將原始序列化的值添加到協議緩衝區中的重複字段(protobuf-net,protobuf-csharp)
我有一個應用程序,它將數據項以序列化的形式保存在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;
}
在這種情況下,我必須用'bytes'替換ResponseItem中的DataItem,並將它留給客戶端來將這些字節解釋爲DataItem對象。我一直在尋找一種能夠保持類型安全的解決方案,並且仍然允許以序列化(二進制)形式添加對象。 – 2010-08-09 08:43:25
@Boris:我不相信我在任何protobuf庫中都看到過這樣做。 – 2010-08-09 08:52:37
嗯,我猜這太好了,不能成立;)感謝您的及時答覆喬恩! – 2010-08-09 08:54:23