Grpc 的Proto语法记录

需要安装Clangprotobuf

syntax ="proto3"; //protobuf的版本
//C#命名空间option csharp_namespace ="namespace"; 其他语言命名空间package package.name;
/*
定义服务
grpc的四种服务类型
*/
service DemoGrpc {

        //一个请求消息对应一个返回消息结果,标准版
	rpc GetDemo1(demoNomsg) returns (demomsg);
        //一个请求消息,服务端可以传回多个消息结果,简称服务流
	rpc GetDemo2(demoNomsg) returns (stream demomsg);
        //反之也可以接收多个消息返回一个消息结果,简称客户流
	rpc GetDemo3(stream demoNomsg) returns (demomsg);
       //上面既然可以对调当然也可以传入多个消息,返回多个消息结果,简称双向流
        rpc GetDemo4(stream demoNomsg) returns (stream  demomsg);
}

/*
不想写在一个文件里可以使用import "文件路径";引用消息文件
定义消息
*/
message demoNomsg{    
    int32 no=1; 
}
message demomsg{    
    int32 no=1;    //默认值 0
    string name=2; //默认值空字符串
    bytes image=3; //默认值空byte数组 
    //bool flag=4;   //默认值 false
    //float num=5;   //默认值 0
    double sum=6;  //默认值 0
    EnumName enumName=7; //枚举默认值是0 tag必须从0开始
    /*repeated用于标明这个字段有多少个,这样发送方发送的时候,
    同时发送了count计数变量和这个字段的起始地址,接收方在接受到数据之后,
    按照count来解析对应的数据即可。*/
    repeated int32 no1=8;
    /*required就是必须的意思proto3不支持,数据发送方和接收方都必须处理这个字段,不然还怎么通讯呢*/
    //required string no2=9;

    reserved "flag","num";//保留字段
    reserved 10 , 12 ,100 to max; //保留字段
    
}
enum EnumName {
    option  allow_alias=true;//加上这句可以取别名
    A_1=0;
    A_2=1;        
    B_1=0;//别名1
    B_2=1;//别名2    
    //B_3=2;//枚举里保留字段
    reserved "B_3";
};


原文地址:https://www.cnblogs.com/SuperDust/p/12692317.html