zoukankan      html  css  js  c++  java
  • protobuf语法

    是什么? 目前市面上的unity手游开发主流数据通讯协议的解决方案。
    protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,
    因此比传统的 XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法
    定义结构化的消息格式,然后送给命令行工具,工具将自 动生成相关的类,可以支持java、c++、python等语言环境。(注意原生不支持C#)
    通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序 列化工作。

    基本语法:
    (1)定义消息 message 关键字

    1 message c2s_login_game_request
    2 {
    3     required string name = 1;//注意这里的1,2不是赋值,而是分配标识号!
    4     required string passw = 2;//注意这里的1,2不是赋值,而是分配标识号!
    5 }


    (2)分配标识号
    <1> 正如上述文件格式,在消息定义中,每个字段都有唯一的一个标识符。这些标识符是用来在消息的二进制格式中识别各个字段的,一旦开始使用就不能够再改变。
    <2>最小的标识号可以从1开始,最大到2^229 - 1(2的229次方), or 536,870,911。
    <3>不可以使用其中的[19000-19999] 的标识号, Protobuf协议实现中对这些进行了预留。如果非要在.proto文件中使用这些预留标识号,编译时就会报警。

    字段关键字
    (3)required(表示该值是必须要设置的)
    (4) optional(消息格式中该字段可以有0个或1个值(不超过1个))。
    (5) repeated(重复的值的顺序会被保留。表示该值可以重复, 相当于C# list)
    (6)proto文件可以添加注释

    (7)导入定义如果想要使用的消息类型已经在其他.proto文件中已经定义过
    你可以通过导入其他的.proto文件中的定义来使用它们。
    写法如下:
    import "myproject/other_protos.proto";


    (8)嵌套类型
    你可以在其他消息类型中定义、使用消息类型,在下面的例子中,ItemInfo消息结构就定义在GetSelfItem_Response消息结构内,如:

     1 message GetSelfItem_Response
     2 {
     3     message ItemInfo
     4     {
     5         required uint32 ItemID = 1;//道具ID
     6         required uint64 ItemCount = 2;//数量
     7         optional string property = 3;//属性
     8     }
     9     repeated ItemInfo Item = 1;
    10 }
  • 相关阅读:
    厦门航空牵手阿里云打造航空业移动研发中台,研发效率提升50%
    可能是国内第一篇全面解读 Java 现状及趋势的文章
    这样才能正确解锁MaxCompute客户端
    MaxCompute问答整理之10月
    tensorflow入门
    buctoj——合法的出栈顺序
    nyoj299——如何优雅的写矩阵快速幂
    nyoj164——卡特兰数(待填坑)
    nyoj139——康托展开
    字符串练习
  • 原文地址:https://www.cnblogs.com/AaronBlogs/p/6815720.html
Copyright © 2011-2022 走看看