Bufory protokołów

Bufory protokołów

Informacja
Opracowany przez Google
Pierwsza wersja 2001
Ostatnia wersja 3,15.8 (8 kwietnia 2021 r)
Kaucja github.com/protocolbuffers/protobuf
Rodzaj Format serializacji danych ( d )
Język opisu interfejsu
Licencja Licencja BSD
Stronie internetowej developers.google.com/protocol-buffers

Bufory protokołów , znane również jako Protobuf , to format serializacji z językiem opisu interfejsu opracowanym przez Google . Oryginalna, opublikowana przez Google implementacja C ++ , Java i Python jest dostępna na bezpłatnej licencji . Implementacje dla innych języków są dostępne lub w fazie rozwoju.

Jego zainteresowania dotyczą tworzenia programów, które komunikują się ze sobą w sieci lub po prostu przechowują dane. Metoda opiera się na języku opisu interfejsu opisującym strukturę danych. Program będzie wtedy mógł wygenerować lub przeanalizować komunikaty zgodnie z tym opisem.

Firma Google opracowała bufory protokołów do użytku wewnętrznego. Stworzył generator kodu dla różnych języków na licencji open source.

Projekt buforów protokołów miał na celu prostotę i wydajność, aby były lżejsze i szybsze niż XML.

Bufory protokołów są szeroko stosowane w Google do przechowywania i wymiany wszelkiego rodzaju struktur informacyjnych. Ta metoda służy jako niestandardowy system zdalnego wywoływania procedur (RPC) używany w prawie całej komunikacji między maszynami w firmie.

Bufory protokołów są bardzo podobne do protokołu Apache Thrift (używanego na przykład przez Facebooka), z tym wyjątkiem, że publiczna implementacja buforów protokołów nie obejmuje prawdziwego zestawu protokołów RPC dedykowanych do określonych usług.

Programista definiuje struktury danych (wiadomości) oraz usługi w .proto pliku i transpile go poprzez Protoc . Ta kompilacja wygeneruje kod, który może zostać wywołany przez nadawcę lub odbiorcę takich struktur danych. Na przykład przyklad.proto wygeneruje pliki przyklad.pb.cc i przyklad.pb.h , definiujac klasy C ++ dla kazdej wiadomosci i uslugi zdefiniowanej przez przyklad .

Komunikaty są serializowane w kompaktowym formacie binarnym, z kompatybilnością wsteczną i do przodu, ale bez samoopisu (w związku z tym nie jest możliwe poznanie etykiet, znaczeń ani typów danych pól bez specyfikacji). Nie ma zdefiniowanego sposobu dołączania lub odwoływania się do takich specyfikacji w pliku Protocol Buffers.

Przykład

message Point { required int32 x = 1; required int32 y = 2; optional string label = 3; } message Line { required Point start = 1; required Point end = 2; optional string label = 3; } message Polyline { repeated Point point = 1; optional string label = 2; }

Komunikat „Point” definiuje dwie obowiązkowe właściwości, „  x  ” i „y”. Właściwość „label” jest opcjonalna. Każda właściwość ma etykietę zdefiniowaną przez znak równości, na przykład „x” ma etykietę 1.

Komunikaty „Linia” i „Polilinia” są złożone, używają w swoich definicjach „Punktu”. Pole typu „powtórzone” w polilinii działa jak wektor .

Ta definicja jest następnie kompilowana, wywołując Protoc, do użytku przez oprogramowanie C ++ w następujący sposób:

#include "polyline.pb.h" // généré en appelant protoc polyline.proto (définition ci-dessus) Line* createNewLine(const std::string& name) { Line* line = new Line; line->mutable_start()->set_x(10); line->mutable_start()->set_y(20); line->mutable_end()->set_x(30); line->mutable_end()->set_y(40); line->set_label(name); return line; } Polyline* createNewPolyline() { Polyline* polyline = new Polyline; Point* point1 = polyline->add_point(); point1->set_x(10); point1->set_y(10); Point* point2 = polyline->add_point(); point2->set_x(10); point2->set_y(10); return polyline; }

Powiązane artykuły

Bibliografia

  1. Wersja 3.15.8  " ,8 kwietnia 2021 r(dostęp 16 kwietnia 2021 )
  2. (in) „  protocol buffers / protobuf  ” na GitHub (dostęp 27 września 2020 ) .

Linki zewnętrzne