prog:protobuf
Ceci est une ancienne révision du document !
Protocol Buffers
Cas simple
Le format de base est simple. Language Guide | 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 { optional uint32 id_message = 1; } message RemoveSubscriber { optional 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 { 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; }
Évolutions
- 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.
- Pour des raisons historiques et de maintenance, il est déconseillé d'utiliser un champ
required
et toujoursoptional
. Car un champrequired
peut évoluer et deveniroptional
au profit d'un autre. [packed=true]
deproto2
est par défaut dans toutes les répétitions dansproto3
.
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.1534599658.txt.gz · Dernière modification : 2018/08/18 15:40 de root