prog:protobuf
Ceci est une ancienne révision du document !
Protocol Buffers
Cas simple
Le format de base est simple. Language Guide Proto 2 | Protocol Buffers , Language Guide Proto 3 | Protocol Buffers
Ici, on crée deux messages AddSubscriber
et RemoveSubscriber
pour le pattern publisher. Dans chaque message, chaque champ doit avoir un identifiant numéraire.
syntax = "proto3"; package llgc.protobuf.pattern.publisher; message AddSubscriber { uint32 id_message = 1; } message RemoveSubscriber { uint32 id_message = 1; }
Import
Il est possible de créer des structures plus complexes avec des sous niveaux et d'importer les messages d'autres fichiers.
syntax = "proto3"; import "pattern_publisher.proto"; package llgc.protobuf.test; message Tcp { message Msg { message Test { } oneof data { llgc.protobuf.pattern.publisher.AddSubscriber add_subscriber = 1; llgc.protobuf.pattern.publisher.RemoveSubscriber remove_subscriber = 2; Test test = 3; } } repeated Msg msg = 1; }
Évolutions
- proto2 :
- Il faut toujours mettre
optional
pour les champs non répétés. Il est déconseillé d'utiliser un champrequired
car un champ peut évoluer et deveniroptional
au profit d'un autre. Ces deux champs ont disparu dansproto3
etoptional
est appliqué. - Mettre
[packed=true]
pour toutes les répétitions. Présent par défaut avecproto3
.
- proto3 :
- Si un champ devient déprécié mais est encore supporté, ajouter
[deprecated=true]
. - Si un champ n'est définitivement plus utilisé, remplacer la ligne avec son identifiant par
reserved id;
. - Les identifiants entre 1 et 15 occupent un octet. Ils sont à privilégier pour les champs répétées. Ceux entre 16 et 2047 sont sur deux octets.
gRPC
Cas simple
Le protocole se déclare dans un fichier .proto
.
Soit une classe Greeter avec une procédure RPC Talk
. Avec la présences des deux stream
, la communication entre le client et le serveur est bidirectionnelle. Les données échangées sont celles du message de type Rpc.
service Greeter { rpc Talk (stream Rpc) returns (stream Rpc) {} }
Soit l'exemple complet :
syntax = "proto3"; import "pattern_publisher.proto"; package llgc.protobuf.test; service Greeter { rpc Talk (stream Rpc) returns (stream Rpc) {} } message Rpc { message Msg { message Test { } oneof data { optional llgc.protobuf.pattern.publisher.AddSubscriber add_subscriber = 1; optional llgc.protobuf.pattern.publisher.RemoveSubscriber remove_subscriber = 2; optional Test test = 3; } } repeated Msg msg = 1; }
prog/protobuf.1534600651.txt.gz · Dernière modification : 2018/08/18 15:57 de root