2013-01-10 28 views
3

所以這樣的例子是:當它反序列化並重新序列化時,節儉是否會持續存在未知字段/字節?

我有類型消息。它在服務器A - > B - > C 之間傳遞。現在讓我們假設創建具有幾個新字段/ ID的Message 2.0版。 服務器A和C知道這種新格式,但服務器B仍在使用舊格式。 所有服務器反序列化,檢查,序列化併發送消息。 假設A填充所有字段(Message的V1.0和V2.0),C會看到消息V2.0的填充字段嗎?

我知道協議緩衝區支持這個。我想知道Thrift是否也支持它。 (快速測試我在C#一樣,答案是沒有,但只是想和大家一起檢查)

由於消息代碼的一個例子,在這裏繼續IDL:

struct Message { // V1.0 
    1: i64 Id; 
} 

struct Message { // V2.0 
    1: i64 Id; 
    2: string Content; 
} 

請問服務器C會看到在A中填充的Message.Content嗎?

+0

您是否嘗試添加可選字段? – EFraim

回答

1

答案是no

關於Protocol Buffers,注意到根據文檔生成的代碼的Python版本不支持這一點也很重要。

https://developers.google.com/protocol-buffers/docs/encoding#order - 「如果消息有未知領域,目前的Java和C++實現把它們寫在順序排序稱爲後場任意順序當前Python實現不跟蹤未知領域」

+0

是什麼讓你如此確信節儉不? http://diwakergupta.github.io/thrift-missing-guide/聲稱它。 – EFraim

+0

至少Python和C++綁定現在不保存未知字段 – EFraim

+0

好吧,顯然「Thrift--缺少的指南」簡直是錯誤的:http://mail-archives.apache.org/mod_mbox/thrift-user/ 201204.mbox/%[email protected].com%3E對不起。 – EFraim

相關問題