Protokollbuffere

Protokollbuffere

Informasjon
Utviklet av Google
Første versjon 2001
Siste versjon 3.15.8 (8. april 2021)
Innskudd github.com/protocolbuffers/protobuf
Type Dataserialiseringsformat ( d )
Grensesnittbeskrivelsesspråk
Tillatelse BSD-lisens
Nettsted developers.google.com/protocol-buffers

Protokollbuffere , også kjent som Protobuf , er et serialiseringsformat med et språk for grensesnittbeskrivelse utviklet av Google . Den opprinnelige publiserte Google-implementeringen for C ++ , Java og Python er tilgjengelig under en gratis lisens . Implementeringer for andre språk er tilgjengelige eller under utvikling.

Hans interesse gjelder utvikling av programmer som må kommunisere med hverandre i et nettverk eller bare lagre data. Metoden er basert på et grensesnittbeskrivelsesspråk som beskriver en datastruktur. Et program vil da kunne generere eller analysere meldingene i henhold til denne beskrivelsen.

Google utviklet protokollbufferne for internt bruk. Han laget en kodegenerator for forskjellige språk under åpen kildekode-lisens.

Utformingen av Protocol Buffers var rettet mot enkelhet og ytelse med målet om å være lettere og raskere enn XML.

Protokollbuffere brukes mye på Google for lagring og utveksling av alle slags informasjonstrukturer. Denne metoden fungerer som et egendefinert RPC-system (Remote Procedure Call) som brukes til nesten all selskapets kommunikasjon mellom maskiner.

Protokollbuffere ligner veldig på Apache Thrift-protokollen (brukt for eksempel av Facebook), bortsett fra at den offentlige implementeringen av Protocol Buffers ikke inkluderer et reelt sett med RPC-protokoller dedikert til spesifikke tjenester.

En programvareutvikler vil definere datastrukturer (meldinger) og tjenester i en .proto- fil og transpilere den via Protoc . Denne samlingen vil generere koden som kan påkalles av en avsender eller mottaker av slike datastrukturer. For eksempel, example.proto vil generere example.pb.cc og example.pb.h filer , definere C ++ klasser for hver melding og service som example.proto definerer.

Meldingene serialiseres i et kompakt binært format, med bakover- og fremoverkompatibilitet, men ikke selvbeskrivende (det er dermed umulig å vite merkene, betydningen eller datatypene til feltene uten spesifikasjonene). Det er ingen definert måte å inkludere eller henvise til slike spesifikasjoner i Protocol Buffers-filen.

Eksempel

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; }

"Punkt" -meldingen definerer to obligatoriske egenskaper, "  x  " og "y". Egenskapen "label" er valgfri. Hver eiendom har en etikett, definert med et likhetstegn, for eksempel har "x" etikett 1.

"Line" og "Polyline" meldingene er sammensatt, de bruker "Point" i definisjonene. Feltet av typen "gjentatt" i Polyline fungerer som en vektor .

Denne definisjonen blir deretter samlet, og kaller Protoc, for bruk av C ++ programvare som følger:

#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; }

Relaterte artikler

Referanser

  1. Utgivelse 3.15.8  " ,8. april 2021(åpnet 16. april 2021 )
  2. (in) "  protokollbuffere / protobuf  "GitHub (åpnet 27. september 2020 ) .

Eksterne linker