一个简单示例

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. 随手撸一个简单的带检查的printf

    #include <stdio.h> #include <iostream> #include <vector> #include <string> # ...

  2. Maven项目中的packaging标签

    <packaging>XXX</packaging> 项目的打包类型xxx:pom.jar.war.(packing默认是jar类型). pom是最简单的打包类型,pom 项目 ...

  3. 用 Java 实现人脸识别功能(附源码)

    整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...

  4. 如何使用API提交转码任务?

    摘要: 当常规的转码工作流无法满足用户的场景时,需用户自己判断业务逻辑,并使用API提交转码任务.例如:并不是所有的视频都需要转码,不同视频需要设置不同的转码配置.本文将介绍API提交转码任务的方法. ...

  5. 钉钉小程序不用canvas在后端绘图前端用image标签获取图片的实践

    公司的需求要用电子员工卡代替用了N久的工作证,在各种场合刷二维码来代替刷卡.在钉钉小程序里实现.感觉这回又要躺坑里了. 钉钉小程序第一次做.我这个自封的GDI+大神才不要想用钉钉jsapi的方式用ca ...

  6. [每日一题系列] LeetCode 1013. 将数组分成和相等的三个部分

    题目: 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false. 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + . ...

  7. racket学习-call/cc (let/cc)

    Drracket continuation 文中使用let/cc代替call/cc Racket文档中,let/cc说明为: (let/cc k body ...+) Equivalent to (c ...

  8. mysql 学习日记 悲观和乐观锁

    理解  悲观锁就是什么事情都是需要小心翼翼,生怕弄错了出大问题, 一般情况下 "增删改" 都是有事务在进行操作的,但是 "查" 是不需要事务操作的, 但是凡事没 ...

  9. 基于osg的python三维程序开发(二)------向量

    上一篇文章展示了如何简单创建一个osg python 程序, 本篇展示了了一些基础数据结构的使用: from pyosg import * vec = osg.Vec3Array() #push ba ...

  10. CSS--transform相关属性实现2d到3d的具体变化

    先放上一段我写的相关代码(可能有一定冗杂代码,请见谅) <!DOCTYPE html> <html lang="en"> <head>      ...