是否可以更改(追加、合并等)序列化protobuf消息而不必先對其進(jìn)行解組?我正在使用golang/protobuf 包。理想情況下,我希望有一個服務(wù)可以接收傳入的序列化消息,即時附加一些字段,然后將消息傳遞給下一個服務(wù) - 有點(diǎn)像中間件,可以將附加信息添加到有效負(fù)載中,而無需必須不斷地解組和編組。一些上下文:系統(tǒng)是實(shí)時的,所以我想盡可能減少開銷。
1 回答

楊__羊羊
TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個贊
如您所知,協(xié)議緩沖區(qū)消息是一系列鍵值對。消息的二進(jìn)制版本僅使用字段的編號作為鍵——每個字段的名稱和聲明的類型只能在解碼端通過引用消息類型的定義(即 .proto 文件)來確定。
對消息進(jìn)行編碼時,鍵和值將連接成一個字節(jié)流。當(dāng)消息被解碼時,解析器需要能夠跳過它不識別的字段。這樣,可以將新字段添加到消息中,而不會破壞不知道它們的舊程序。為此,有線格式消息中每一對的“密鑰”實(shí)際上是兩個值——您的 .proto 文件中的字段編號,加上一個提供足夠信息來查找以下值長度的連線類型。
因此,要將字段附加到編碼的協(xié)議緩沖區(qū)消息,您可以簡單地將編碼字段附加到字節(jié)流/切片的末尾。
添加回答
舉報(bào)
0/150
提交
取消