• 微服务学习(二)--protobuf


    一、语法:

      syntax = "proto3";

      // 熊猫 发送消息
      message PandaRequest{
        // 姓名
        string name=1;
        // 身高
        int32 shengao=2;
        // 体重
        repeated int32 tizhong=3;
      }

      message PandaResponse{
        // 错误码
        int32 error=1;
        // 错误信息
        string message=2;
      }
    二、数据类型

      A、double(float64)、float(float32)、int32、uint32、uint64、sint32(int32,使用变长编码,这些编码在负值时比int32高效的多)、sint64(int64,使用变长编码,编码时比通常的int64高效)、fixed32(uint32,总是4个字节,如果数值总是比228大的话,这个类型会比uint32高效)、fixed64(uint64,总是8个字节,如果数值总是比256大的话,会比uint64高效)、sfixed32(int32,总是4字节)、sfixed64(uint64,总是8字节)、bool、string、bytes([]byte,可能包含任意顺序的字节数据)

      B、使用其它消息类型

        message PersonInfo {

          repeated Person info=1;

        }

        message Person{

          string name=1;

          int32 shengao=2;

          repeated int32 tizhong=3;

        }

      C、嵌套类型

        1. message PersonInfo {

          message Person{

            string name=1;

            int32 shengao=2;

            repeated int32 tizhong=3

          }

          repeated Person info=1;

        }

        2. 在父消息外部重用

          message PersonMessage{

            PersonInfo.Person info=1;

          }

        3. 消息可以嵌套任意多层

    三、定义服务(service)

      A、如果想要将消息类型用在RPC(远程方法调用)系统中,可以在.proto文件中定义一个RPC服务接口,protocol buffer编译器将会根据所选则的语言的不同生成服务代码及存根。如:

        service SearchService{

          // rpc 服务的函数名(传入参数)返回 (返回参数)

          rpc Search (SearchRequest) returns (SearchResponse)

        }

    四、编译

      A、protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --python_out=DST_DIR --go_out=DST_DIR path/to/file.proto

        IMPORT_PATH声明了一个.proto文件所在的解析import具体目录。如果忽略该值,则使用当前目录。如果有多个目录则可以多次调用--proto_path,它们将会顺序的被访问并导入。-I=IMPORT_PATH是--proto_path的简化形式。

  • 相关阅读:
    android通过Canvas和Paint截取无锯齿圆形图片
    【转】mysql的cardinality异常,导致索引不可用
    mysql索引无效且sending data耗时巨大原因分析
    linux shell脚本通过参数名传递参数值
    git日志输出格式及两个版本之间差异列表
    jenkins结合ansible用shell实现自动化部署和回滚
    Linux下cp -rf总是提示覆盖的解决办法
    jenkins集成ansible注意事项Failed to connect to the host via ssh.
    ansible操作远程服务器报Error: ansible requires the stdlib json or simplejson module, neither was found!
    利用ssh-copy-id无需密码登录远程服务器
  • 原文地址:https://www.cnblogs.com/DjanFey/p/12157652.html
Copyright © 2020-2023  润新知