特点: Google 出品开源免费、跨平台、支持c#、且数据体量更小、解析速度更快。用VSCODE编辑比较方便,适合用于传输客户端和服务器的各种协议(客户端的各种Request和服务端返回的Response)。
一、安装使用
- 下载地址:
链接:https://pan.baidu.com/s/1VatB-lPpKfk5tCZ0drW3xA
提取码:sf3y
- 使用方法(C#)
- 解压后,打开
genproto.cmd
文件,并更改一下目录的路径:
–proto_path=.proto文件的目录
–csharp_out=.cs文件的输出目录
-
message.proto即proto目录下的protobuf文件,新建1个txt更改后缀,用vscode之类的编辑即可
比如:
syntax = "proto3"; package Test.Message; option csharp_namespace = "Test.Message"; enum TEST { A = 0; B = 1; } message Testmsg { int32 num=1; TEST test =2; }
-
建好目录后运行
genproto.cmd
文件 -
输出目录下自动生成message.cs
-
将生成的cs项目包含到c#项目中
-
项目中安装Nuget包:protobuf-net(Nuget管理器中浏览-搜索-安装)
-
using调用Test.Message,OK
二、常用语法
syntax=“proto3”;
文件的第一行指定了你使用的是proto3的语法:如果你不指定,protocol buffer 编译器就会认为你使用的是proto2的语法。这个语句必须出现在.proto文件的非空非注释的第一行。
package user;
编译完成之后,包名为user
service 定义服务
service UserService {
rpc Login(LoginRequest) returns (LoginResponse);
}
message 定义结构体
message LoginRequest {
string username=1;
string password=2;
}
数据类型
- strings 默认值是空字符串
- int32 默认是0(编译之后为go语言中的int类型)
- int64 默认是0 (编译之后为go语言中的int64)
- float 默认为0.0 (编译之后为go语言中的 float32)
- double 默认为0.0 (编译之后为go语言中的 float64)
- uint32 (编译之后为go语言中的 uint32)
- uint64 (编译之后为go语言中的 uint64)
- bytes 默认值是空bytes
- bool 默认值是false
- enum 默认值是第一个枚举值(value必须为0)
字段修饰符
repeated
:用来定义数组,一个字段可以重复出现一定次数(包括零次)required
:值不可为空 (proto3中已删除)optional
:可选字段 (proto3中已删除)singular
:符合语法规则的消息包含零个或者一个这样的字段 (proto3中已删除)- 默认值:
string code=2 [default=200];
(proto3中已删除) - 预留字段:
reserved 6 to 8;