需要安装Clang 和 protobuf
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";
};