簡體   English   中英

使用Google Protocol Buffer在C ++和JavaScript端點之間序列化/反序列化數據?

[英]Serializing/Deserializing data betwee C++ and JavaScript endpoints with Google Protocol Buffer?

我正在研究在C ++應用程序上通過Google協議緩沖區序列化數據,將數據發送到JavaScript應用程序以及反序列化數據以供JavaScript應用程序使用的可能性。 但是,由於沒有“ ParseFromString()”函數功能,我不確定如何完成此操作,也找不到任何明確的答案或示例。 如何才能做到這一點?

我正在使用google-protobuf和proto3。 我沒有做太多嘗試……事實是我什至不知道從哪里開始。 我想提供一個MCVE,但不知道該如何實現。

我看過“ deserializeBinary”,但是在從接收到的消息中解析數據時,我丟失了鍵入(deserializeBinary()需要“對象”類型參數)。 我正在使用二進制解析器從序列化的協議緩沖區數據中解析標頭。

// var msg == full received message from c++ server 
// which consists of 32 bit header
var parser = new Parser()
  .uint16("header_val_1")
  .uint16("header_val_2")
  .string("msg_payload", {
    zeroTerminated: true
  });
var msgObj = parser.parse(msg);
var payloadData = msgObj.msg_payload;
var newData = ProtoMsg.SpecialData.deserializeBinary(payloadData);
// throws type error (expects 'object')

我希望newData會填充預期的SpecialData消息類型,以便可以檢查特定的數據點。

newData.getLength()

但是我無法克服錯誤,即使那樣我也不確定自己是否做對了。

您正在做的事情可以工作。 但是,您應該考慮javascript中可用的數據類型。 沒有64位整數可用。 有一些第三方javascript庫(如jsbn)可用於任意精度數字。 二進制解析器是一個不錯的選擇,但是它不能處理所有必需的類型。

您必須填寫此表的javascript列,而使用javascript則很難涵蓋所有內容。

其次,編寫解析器絕非易事,您必須遵循編碼規范中的所有規則。 這可能是很多工作。

與json之類的其他選項相比,協議緩沖區主要用於提高性能。 但是在javascript的世界中,我懷疑性能不會很出色,並且使用與javascript完全匹配的json可能會更好。

無論如何,實際上都存在對js的protobuf支持 ,它不是其主要支持的語言之一,但可用。 還有另一種選擇 如果您仍在尋找自己編寫的內容,則可以看到這些實現如何處理我提到的挑戰以及隨之而來的其他挑戰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM