Сериализация / десериализация данных между конечными точками C ++ и JavaScript с буфером протокола Google? - PullRequest
1 голос
/ 27 марта 2019

Я исследую возможность сериализации данных с помощью буферов протокола Google в приложении C ++, отправки данных в приложение JavaScript и десериализации данных для использования приложением JavaScript.Однако, без возможности функции ParseFromString (), я не уверен, как это можно сделать, и не могу найти четкого ответа или примера.Как это можно сделать?

Я использую google-protobuf и proto3.Я не очень старался ... правда в том, что я даже не знаю, с чего начать.Я хотел бы предоставить MCVE, но не знаю, как с тем, что я пытаюсь достичь.

Я посмотрел на "deserializeBinary", но я потерял набор текста (deserializeBinary () требуется "объект")введите param) при разборе данных из полученного сообщения.Я использую двоичный парсер для анализа заголовка из данных буфера сериализованного протокола.

// 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()

Однако я не могу справиться с ошибкой, и даже тогда я не уверен, правильно ли я это делаю.

1 Ответ

0 голосов
/ 27 марта 2019

То, что вы делаете, может работать.Тем не менее, вы должны рассмотреть, какие типы данных доступны в JavaScript.Нет доступных 64-битных целых чисел.Существует несколько сторонних библиотек javascript, таких как jsbn для произвольных прецизионных чисел, которые можно использовать.двоичный парсер - хороший выбор, но он не может обрабатывать все требуемые типы.

Вы должны будете заполнить столбец javascript для этой таблицы , и с javascript будет сложно охватить все.

Во-вторых, написание парсера - непростая задача, вам придется следовать всем правилам в спецификации кодирования .Это может быть много работы.

Буферы протокола используются главным образом для производительности, по сравнению с другими параметрами, такими как json.Но в мире javascript я подозреваю, что производительность не будет звездной, и вам лучше было бы использовать json, который хорошо сочетается с javascript.

В любом случае, на самом деле существует поддержка protobuf дляjs , это не один из основных поддерживаемых языков, но он доступен.Существует также другой вариант .Если вы все еще хотите написать свой собственный документ, вы увидите, как эти реализации справились с упомянутыми мною проблемами и другими возникающими проблемами.

...