一个简单示例

syntax ="proto3";//设置默认版本,不写默认为proto2

//1,2,3  是字段的标记 Tag 不表示字段的值
message FirstMessage{
int32 id=;
string name=;
bool is_male=;
}

syntax="proto3";

message Person{
int32 id=;
string name=;
float height=;
float weight=;
bytes avatar=;
string email=;
bool email_verified=; repeated string phone_number=8;//packed
//表示这些范围的数字/字段要保留。不能对自己或其他开发者所使用,就是占个茅坑
reserved 9,10,20 to 100, 200 to max;
reserved "foo","bar";
}

服务器定义和客户端的消息定义,如果服务费端的某个字段没有传值,就会默认使用下面的字段类型的默认值

枚举里也可以使用 reserved ,repeated

定义一个枚举

   Gender gender=;
enum Gender{
NOT_SPECIFIED=;//必须有0
FEMALE=;
MALE=;
}

   Gender gender=;
enum Gender{
option allow_alias =true;
NOT_SPECIFIED=;//必须有0
//两个单词都表示女
FEMALE=;
WOMAN=;
//两个单词都表示男
MAN=;
MALE=;
}

如果在一个message 中定义的太多,就会影响代码的阅读质量,可以写成类似于类的形式,调用即可

另外,在message中也可以嵌套定义message

syntax="proto3";

message Person{

   //使用重复字段repeated修饰 表示一个人可以有多个住址
repeated Address address=13;
//住址
message Address{
string province=1;
string city=2;
string zip_code=3;
string street=4;
string number=5;
}
}

假设项目较大,恰好有两个message都叫同一个名字,但是目录结构不一样,这时候仅仅靠目录结构不同,是不能避免冲突的,可以使用打包

在编译的就会自动生成C#的命名空间 namespace My.Project

package my.project;//C# namespace My.Project

还可以设置命名空间

option csharp_namespace ="My.WebApis";

设置Protocol Buffers编译器

protoc编译器主要就是用来生成代码的,下载地址

https://github.com/protocolbuffers/protobuf/releases

找到对应版本,在这里用的是protoc-3.11.4-win64

解压,自己找个目录存放起来

设置环境变量,复制路径(到bin目录:E:\protoc-3.11.4-win64\bin)

添加到path环境变量

success

在vscode 中使用命令行

在终端输入protoc,不行的话重启vscode ,因为设置了环境变量,vscode还没有读取到

输入protoc后可以自行查看参数

使用protoc生成C#代码

protoc --csharp_out=csharp date.proto

2.Grpc消息定义的更多相关文章

  1. gRPC in ASP.NET Core 3.x -- Protocol Buffer(3)更新消息类型

    当你第一次定义Protocol Buffer的消息的时候,你肯定会给消息设定一套规则需求.但是随着时间的推进,你的业务可能会发生了变化,与此同时,你的Protocol Buffer消息类型的需求也会随 ...

  2. Language Guide (proto3) | proto3 语言指南(一)定义消息类型

    定义消息类型 首先让我们看一个非常简单的例子.假设您想定义一个搜索请求消息格式,其中每个搜索请求都有一个查询字符串.您感兴趣的特定结果页以及每页的结果数.下面是用于定义.proto消息类型的文件. s ...

  3. 使用Node.JS访问Hyperledger Fabric的gRPC服务

    在即将正式发布的Hyperledger Fabric SDK 1.0中,Hyperledger Fabric通过gRPC提供服务接口以取代现有的REST API.本文介绍了如何使用Node.JS访问H ...

  4. gRPC helloworld service, RESTful JSON API gateway and swagger UI

    概述 本篇博文完整讲述了如果通过 protocol buffers 定义并启动一个 gRPC 服务,然后在 gRPC 服务上提供一个 RESTful JSON API 的反向代理 gateway,最后 ...

  5. 进行API开发选gRPC还是HTTP APIs?

    上一篇文章我带着大家体验了一把<ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)>,如果有兴趣的可以点击链接进行查看,相信跟着做的你,也是可以跑起来的.这篇文章我们将一 ...

  6. gRPC 在 Python中的应用

    python -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. hello.proto 简介 在python ...

  7. PICE(6):集群环境里多异类端点gRPC Streaming - Heterogeneous multi-endpoints gRPC streaming

    gRPC Streaming的操作对象由服务端和客户端组成.在一个包含了多个不同服务的集群环境中可能需要从一个服务里调用另一个服务端提供的服务.这时调用服务端又成为了提供服务端的客户端了(服务消费端) ...

  8. gRPC 的route_guide例子

      本文的例子代码在: https://github.com/grpc/grpc-go/tree/master/examples/route_guide 功能就类似目前LBS一样,在每个位置上报一些文 ...

  9. gRPC初探——概念介绍以及如何构建一个简单的gRPC服务

    目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...

随机推荐

  1. 基于layPage分页插件浅析两种分页方式

    最近在开发过程中经常用到分页,今天挤出些时间来捋一捋自己的经验 在web开发中,一般显示数据列表页时,我们会用到分页控件来显示数据.采用分页一般基于两种不同的需求,一种是数据量不算很大,但是在页面展示 ...

  2. 自然语言处理NLTK之入门

    环境:window10 + python3 一.安装NLTK pip install nltk # 或者 PyCharm --> File --> Settings --> Proj ...

  3. SpringBoot入门系列(二)如何返回统一的数据格式

    前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/ ...

  4. czC#02

    1.out参数 out参数要求在方法的内部必须为其赋值 using System; using System.Text; namespace Demo { class Program { //返回一个 ...

  5. 解决ionic2/ionic3轮播图切换页面或者点击过后不自动轮图

    我们在ionic2/ionic3开发的过程中会出现切换页面或者滑动切换轮播图出现轮播图不再轮播的情况,这其实需要一些配置. 首先在运用到轮播图的component中引入 import {ViewChi ...

  6. d3.js ---画坐标轴

    画坐标轴 //使用d3的svg的axis()方法生成坐标轴 var x_axis = d3.svg.axis().scale(scale_x), y_axis = d3.svg.axis().scal ...

  7. psql的时间类型,通过时间查询

    psql的时间类型,通过时间查询 psql有date/timestamp类型,date只显示年月日1999-01-08,而timestamp显示年月日时分秒 1999-01-08 09:54:03.2 ...

  8. python+opencv->边缘提取与各函数参数解析

    前情提要:作为刚入门机器视觉的小伙伴,第一节课学到机器视觉语法时觉得很难理解, 很多人家的经验,我发现都千篇一律,功能函数没解析,参数不讲解,就一个代码,所以在此将搜集的解析和案例拿出来汇总!!! 一 ...

  9. 关于Spring和SpringMVC的总结

    1.Spring中AOP的应用场景.AOP原理.好处? 答:AOP:Aspect Oriented Programming面向切面编程:用来封装横切关注点,具体可以在下面场景中使用: Authenti ...

  10. JavaScript对象(一)

    Part One:对象的创建对象的创建,可以使用new Object() 或者 Object.creat(),该方法为静态函数 var foo = Object.create({x:1,y:2});  ...