Outils pour utilisateurs

Outils du site


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 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 toujours optional. Car un champ required peut évoluer et devenir optional au profit d'un autre.
  • [packed=true] de proto2 est par défaut dans toutes les répétitions dans proto3.
  • Si un champ devient déprécié, ajouter [deprecated=true].
prog/protobuf.1534598174.txt.gz · Dernière modification : 2018/08/18 15:16 de root