可以有這樣的消息嗎?protobuf消息中的自引用字段
message A {
required int64 some_number = 1;
// .... some more fields
optional A sub_a = 123;
}
原因是把我當前協議的商店裏直接和包裹A在另一條消息會導致存儲的海量數據轉換。
2.2.0 protoc編譯好了。 這可以使序列化/反序列化的任何問題,並由protobuf網支持。
可以有這樣的消息嗎?protobuf消息中的自引用字段
message A {
required int64 some_number = 1;
// .... some more fields
optional A sub_a = 123;
}
原因是把我當前協議的商店裏直接和包裹A在另一條消息會導致存儲的海量數據轉換。
2.2.0 protoc編譯好了。 這可以使序列化/反序列化的任何問題,並由protobuf網支持。
這是一個完全正常的定義,應該在任何實現工作(包括protobuf網);你有沒有看到任何問題?然而!您可能需要考慮序列化的計算影響 - 特別是序列化子消息時,需要知道子消息的大小第一個。深度遞歸的方法(如該鏈接列表所需)可能會導致一些問題。
是否有任何理由不能只是一個repeated
消息呢?那到目前爲止是我的偏好。
我不知道protobuf網,但它應該是絕對好的。我懷疑,如果它確實在protobuf網不工作,馬克將計爲一個錯誤,並修復它......這是肯定我會帶我的C#端口:)
(實事求是的態度,我不能很容易地看到這將是一個問題......它不像消息將由結構表示,遞歸會成爲一個問題。)
它應該很容易測試 - 我建議你試試一下,看看是否遇到任何問題。你真正需要做的就是創建一條消息,並測試你是否可以正確序列化和反序列化它,可能是在不同的平臺之間。
編輯:顯然,你需要確保有沒有實際的週期在消息本身而言...
我可以看到一些問題,如果這(鏈表)過長... – 2011-05-10 05:41:31
我測試它與谷歌的實施,而不是protobuf網側,我沒有太多的訪問。 – 2011-05-10 08:48:16
它工作正常順便說一句:) – 2011-05-10 08:48:33
當前協議正在發送和存儲A消息,而不是重複A字段的包裝器B.改變協議更加有效,然後僅向A添加字段。在B情況下,我需要將所有存儲的數據轉換爲新的消息類型或支持A和B消息。 – 2011-05-10 08:51:33