我是靠谱客的博主 孝顺纸鹤,最近开发中收集的这篇文章主要介绍Protobuf语法格式学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Protobuf消息定义

消息由至少一个字段组合而成,类似于C语言中的结构。每个字段都有一定的格式。

  1. 字段格式:限定修饰符① | 数据类型② | 字段名称③ | = | 字段编码值④ | [字段默认值⑤]
  2. 限定修饰符包含 requiredoptionalrepeated
    Required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。
    Optional: 表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。—因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。
    Repeated: 表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。可以看作是在传递一个数组的值。

以下是一个protobuf文件:

package ProtoCmd;
import "PublicMsg.proto";
import "PublicDefine.proto";

message ReqQueryIoRankCmd
{
 required uint32 rank_type = 1;	//注释
 repeated uint32 player_id_list = 2;	
}

message AnsQueryIoRankCmd
{
 required uint32 ret = 1;
 optional uint32 rank_type = 2;	
 optional PlayerGrading rank_list = 3;
}

message NoticePlayerRankInfo
{
 optional PlayerGrading rank_info = 1;
}

message ReqAchiveRewardCmd
{
 optional uint32 task_id = 1; 
}

message AnsAchiveRewardCmd
{
 required uint32 ret = 1;
 optional uint32 task_id = 2; 
}

message NoticePlayIoTaskInfo
{
 optional PlayIoTaskInfo io_task_info = 1;
}


最后

以上就是孝顺纸鹤为你收集整理的Protobuf语法格式学习的全部内容,希望文章能够帮你解决Protobuf语法格式学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部