zoukankan      html  css  js  c++  java
  • Sword protobuf学习二

    编写protobuf消息文件

    文件格式: xxx.proto

    //标明使用哪个版本的protobuf,默认2.0版本
    syntax = "proto3";
    
    //类似于c++中的namespace
    package commun;
    
    //message类首字母需要大写,message类中所有的成员属性最好全部小写,因为在赋值时,protobuf提供的方法名字全部是小写的
    message Say{
        //字段规则移除了"required",并把"optional"改名为"singular";
        //singular修饰表示该字段可以有0个或1个值(不超过1个),即可写也可以不写 
        int32 code = 1;
        string data = 2;
        //定义一个数组,数组元素是string类型 repeated关键字是用来定义一个数组的
        repeated string name = 3;
        //定义map
        map<int32, string> projects = 4;
        //定义字符数组,用来存二进制文件数据
        bytes audio = 5;
        //定义一个变量,来存储文件的长度,filesize与audio这个变量紧密相关
         int32 filesize = 6;
    }

    protobuf生成对应语言文件的脚本如下

    #!/bin/bash
    
    SRC_DIR=.
    DST_DIR=.
    
    #build protobuf
    #protoc选项
    #--proto_path=SRC_DIR
    #SRC_DIR声明了一个.proto文件所在的解析import具体目录。如果忽略该值,则使用当前目录。
    #如果有多个目录则可以多次调用--proto_path,它们将会顺序的被访问并执行导入。-I=IMPORT_PATH是--proto_path的简化形式。
    #-I主要是用在proto文件中有import关键字的场景下,没有import关键字可以不用-I
    
    #不同目录下的多文件编译
    #protoc -I=${SRC_DIR} --cpp_out=$DST_DIR 文件目录1 文件目录2 文件目录3 ...

      #grpc框架命令 -- 如果不使用grpc可以省略
      protoc -I=${SRC_DIR} --grpc_out=${DST_DIR} --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` ${SRC_DIR}/*.prot

      #protobuf命令

      protoc -I=${SRC_DIR} --cpp_out=$DST_DIR $SRC_DIR/*.proto

    
    mv ./*.h ../include
    
    #修改文件名,个人喜好cpp结尾
    for name in `ls $DST_DIR/*.cc`
    do
        mv $name ${name/[.]cc/.cpp}
    done
    
    mv ./*.cpp ../src
  • 相关阅读:
    [转]为什么udp为什么不能发送大于1472字节数据
    曾经的那些入过的坑 内网中部署bcos
    安装FISCO-BCOS的那些坑
    springcloud基础入门
    BCOS常见的问题
    软件测试工程师必须要知道的9点
    十款APP开发框架
    Thinkphp开源框架如何使用?
    软件测试工程师面试必须要注意的7点
    一个APP开发有那么难吗?
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/9689553.html
Copyright © 2011-2022 走看看