Буферы протокола

редактировать
Буферы протокола
Разработчик (и) Google
Первоначальный выпускНачало 2001 г. ( внутренний). 7 июля 2008 г. (2008-07-07) (общедоступно)
Стабильный выпуск 3.12.4 / 29 июля 2020 г.; 2 месяца назад (29.07.2020)
Предварительный выпуск 4.0.0-rc2 / 21 июля 2020 г.; 2 месяца назад (21.07.2020)
Репозиторий Измените это в Wikidata
Операционная система Любая
Платформа Cross -platform
Тип формат и библиотека сериализации, IDL компилятор
Лицензия BSD
Веб-сайтразработчики.google.com / protocol-buffers / Измените это в Wikidata

Protocol Buffers (Protobuf ) - это метод сериализации структурированных данных. Это полезно при разработке программ для связи друг с другом по сети или для хранения данных. Метод включает в себя язык описания интерфейса, который описывает структуру некоторых данных, и программу, которая генерирует исходный код из этого описания для генерации или анализа потока байтов, представляющего структурированные данные.

Содержание

  • 1 Обзор
  • 2 Пример
  • 3 Поддержка языков
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки

Обзор

Протокол, разработанный Google Буферы для внутреннего использования и предоставлен генератор кода для нескольких языков по лицензии с открытым исходным кодом (см. ниже).

Цели разработки протокольных буферов подчеркивали простоту и производительность. В частности, он был меньше и быстрее, чем XML..

Протоколные буферы, широко используемые в Google для хранения и обмена всех видов структурированной информации. Этот метод служит основой для настраиваемой системы удаленного вызова процедур (RPC), которая используется почти для всех межмашинного взаимодействия в Google.

Буферы протокола аналогичен протоколам Apache Thrift (используется Facebook), Ion (создан Amazon) или Microsoft Bond, предлагая также конкретный стек протоколов RPC для использование для определенных служб с именем gRPC.

Структуры данных (называемые сообщениями) и службы описаны в файле определения прототипа (.proto) и скомпилированы с помощью протокола. Эта компиляция генерирует код, который может быть вызван отправителем или получателем этих структур данных. Например, example.pb.ccи example.pb.hгенерируются из example.proto. Они определяют классы C ++ для каждого сообщения и службы в example.proto.

Канонически сообщения сериализуются в формат binary wire, который является компактным., прямая и обратная совместимость, но не с самоописанием (то есть нет способа указать имена, значение или полные типы данных полей без внешней спецификации). Не существует определенного способа включения или ссылки на такую ​​внешнюю спецификацию (схема ) в файле буферов протокола. Официально поддерживаемая реализация включает в себя формат сериализации ASCII, но этот формат, хотя и самоописательный, теряет поведение прямой и обратной совместимости и, таким образом, не является хорошим выбором для приложений, кроме отладки.

Хотя основная цель протокольных буферов - облегчить сетевое взаимодействие, их простота и скорость делают протокольные буферы альтернативой ориентированным на данные классам и структурам C ++, особенно там, где может потребоваться взаимодействие с другими языками или системами. будущее.

Пример

Схема для конкретного использования буферов протокола связывает типы данных с именами полей, используя целые числа для идентификации каждого поля. (Данные буфера протокола содержат только числа, а не имена полей, что обеспечивает некоторую экономию полосы пропускания / хранилища по сравнению с системами, которые включают имена полей в данные.)

//polyline.proto syntax = "proto2"; сообщение Point {требуется int32 x = 1; требуется int32 y = 2; необязательная строка label = 3; } message Line {обязательная точка start = 1; Требуемый конец точки = 2; необязательная строка label = 3; } сообщение Полилиния {повторяющаяся точка точка = 1; необязательная строка label = 2; }

Сообщение «Point» определяет два обязательных элемента данных, x и y. Метка элемента данных не является обязательной. У каждого элемента данных есть тег. Тег определяется после знака равенства. Например, x имеет тег 1.

Сообщения «Линия» и «Ломаная линия», в которых используется точка, демонстрируют, как композиция работает в буферах протокола. Ломаная линия имеет повторяющееся поле, которое ведет себя как вектор.

Эта схема впоследствии может быть скомпилирована для использования в одном или нескольких языках программирования. Google предоставляет компилятор под названием protoc, который может производить вывод для C ++, Java или Python. Другие компиляторы схемы доступны из других источников для создания зависимого от языка вывода для более чем 20 других языков.

Например, после создания C ++ версии схемы буфера протокола, указанной выше, создается файл исходного кода C ++, polyline. cpp, может использовать объекты сообщения следующим образом:

// polyline.cpp #include "polyline.pb.h" // сгенерировано вызовом "protoc polyline.proto" Line * createNewLine (const std :: string name) { // создаем строку от (10, 20) до (30, 40) Line * line = new Line; строка->mutable_start () ->set_x (10); строка->mutable_start () ->set_y (20); строка->mutable_end () ->set_x (30); строка->mutable_end () ->set_y (40); строка->set_label (имя); обратная линия; } Polyline * createNewPolyline () {// создаем полилинию с точками в точках (10,10) и (20,20) Polyline * polyline = new Polyline; Точка * точка1 = полилиния->add_point (); точка1->set_x (10); точка1->set_y (10); Точка * точка2 = полилиния->add_point (); точка2->set_x (20); точка2->set_y (20); возвратная полилиния; }

Поддержка языка

Protobuf 2.0 предоставляет генератор кода для C ++, Java, C# и Python.

Third -party реализации также доступны для JavaScript.

Protobuf 3.0 предоставляет генератор кода для C ++, Java (включая JavaNano, диалект, предназначенный для low- ресурсные среды ), Python, Go, Ruby, Objective-C, C#. Он также поддерживает JavaScript, начиная с версии 3.0.0-beta-2.

Protobuf 4.0 во многом совпадает с 3.0, но расширение C для PHP переписывается, и поддержка PHP 5 прекращается.

Третий- партийные реализации также доступны для C, Dart, Haskell, Perl, PHP, R, Rust, Scala, Swift и Джулия.

См. Также

  • Портал бесплатного программного обеспечения с открытым исходным кодом

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-02 08:43:01
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте