Opracowany przez | |
---|---|
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.
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; }