什么是grpc?

grpc来自大名鼎鼎的谷歌,孵化于CNCF基金会(docker、k8s同样出自这个基金会)。它是一款高性能、开源、通用的rpc框架,你可以通过它来定义rpc的请求和响应。它基于http/2,全双工通信、低延迟、高效率、支持流、可轻松的插入身份认证、负载均衡、监控日志等等等等。。。关键是它还可以跨语言操作。只要server端或client端是它支持的语言编写,都可以跨语言操作。官方支持的开发语言:

什么是rpc?

rpc,全称Remote Procedure Call,通过它,你可以像调用本地方法一样调用远程服务。前端可以调用后端方法,后端也可以调用前端方法。其实这个概念并不陌生,上一篇关于web实时应用的文章也提到了这个概念,并实现了前后端互调的操作。

在正式开始使用grpc之前,我们还需要掌握protocol buffer的概念。

为什么用protocol buffer?

因为grpc采用合约优先的API开发模式,默认采用protocol buffer作为接口设计语言,我们可以在proto文件里定义消息和服务。当然,作为默认选项,它自然是有优势的,主要是这些:

1、语法简单,容易上手。

2、可生成所有(官方称)主流开发语言的代码。

3、二进制格式,效率高的同时也很适合大数据传输。

了解完基础以后,先上一个小demo参考一下:

syntax = "proto3";

import "aaa.proto";
option csharp_namespace = "gRPCApiDemo.Protos"; package Demo; service Math{
rpc Add (AddRequest) returns (AddRespones);
} message AddRequest{
int32 a=;
int32 b=;
} message AddRespones{
int32 a=;
repeated int32 b=;
  reserved 3,4 to 10;
  reserved "phone";
}

解读一下:

syntax:声明当前使用的语法

import:引入其他proto

option csharp_namespace:打包以后类的命名空间,优先级高

package:打包以后类的命名空间,优先级低

service:声明服务

rpc Add (AddRequest) returns (AddRespones):声明一个rpc调用,接收AddRequest消息,返回AddRespones消息。

message:声明消息

int32:数据类型,常用的还有int64、float、string、bool等,有兴趣的可以去查一下。

a=1:如果把a看作字段名,那么1相当于字段名的别名。

repeated:可重复字段。如果给b多个值,那么b差不多相当于一个int类型的数组,先后顺序会被保留。

reserved:保留字段,声明以后的字段名和别名都不允许再使用了。需要注意字段名和别名不能一起声明。

编译proto

proto编译的主要目的是生成代码。

首先是工具,点击这里,选出适合自己系统的插件,如图:

下载完以后随便找个目录解压,然后把其中的bin目录添加到环境变量里:

如果在控制台输入protoc可以看到一堆信息弹出来,就表示安装成功了:

在我们使用protoc把proto文件编译成c#文件之前,我们还需要做这些:

1、指定proto项目路径。

可以用rotoc --IPath(或--proto_path)或者直接打开控制台转到protoc安装目录。

2、指定生成文件的类型和路径。

protoc --csharp_out=cs grpcApi.proto   //如果有多个proto文件想批量生成可以使用  *.proto

上面的cs是我新建的文件夹名(这个文件夹是建立在proto项目目录下的),grpcApi.proto是自建的proto文件,执行结果见图:

成功以后会在指定的目录下生成cs文件,见图:

生成的文件和proto文件命名一样,只不过首字母会自动大写,打开看看:

好吧能看懂的有限,所以看看就行了。

不过有一点千万注意:这个cs文件不要手动改,不要手动改,不要手动改!

关于应用

能使用编译器生成代码就可以用了么?其实还差很多。距离正式应用还差服务端和客户端的编写部署。

不过因为时间问题,在这一篇写不完。下一篇再见~

gRPC by .net core 3.x——概念、语法、编译的更多相关文章

  1. Java基础概念语法

    Java基础概念语法 注释 单行注释 //行注释说明 多行注释 /* 多行注释说明 */ 文档注释 /** *@author 程序的作者 *@version 源文件的版本 *@param 方法的参数说 ...

  2. GRPC与.net core

    系列章节 GRPC与.net core GRPC截止时间与元数据 GRPC与netcore Identity GRPC与netcore IdentityServer4 概述 GRPC的数据交互模式有: ...

  3. gRPC asp.net core自定义策略认证

    在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...

  4. Office·Word高级·VBA基础概念语法

    阅文时长 | 5.21分钟 字数统计 | 1823字符 『Office·Word高级·VBA基础概念语法』 编写人 | SCscHero 编写时间 | Monday, June 29, 2020 文章 ...

  5. 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

    这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...

  6. .NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT,将.NET Core应用打包成一个可执行文件并包含运行时. 支持Windows, MacOS and Linux x64 w/ RyuJIT ...

  7. .net core 3.0视图动态编译

    之前在使用Visual Studio 2019的时候,就发现asp.net 3.0中没有cshtml动态编译的功能了:也就是说,如果改了cshtml,刷新页面不会立即生效,而是要重新编译一次才行. 这 ...

  8. ASP.NET Core 中的 Razor 文件编译

    asp .net core mvc 3.0 在编译的时候做了一些改变,有些view视图更改需要重新编译,你也可以配置运行时编译,不用每次更改都去重新生成,具体代码如下,从官方文档看到,做个记录. Ra ...

  9. [转帖].NET Core单文件发布静态编译AOT CoreRT

    .NET Core单文件发布静态编译AOT CoreRT https://www.cnblogs.com/linezero/p/CoreRT.htm .NET Core单文件发布静态编译AOT Cor ...

随机推荐

  1. Linux权限管理命令chown、chgrp、umask详解

    命令chown详解 命令chown,所在路径为: 可以看到,这个命令的路径为:/usr/bin/chown ,所以它的执行权限是所有用户 命令的基本功能是改变文件或目录的所有者(只有root可以进行, ...

  2. 一个Jmeter模拟上传文件接口的实例

    资料参考:https://blog.csdn.net/u010390063/article/details/78329373 项目中,避免不了要用到很多上传文件.图片的接口,那么碰到这类接口该如何进行 ...

  3. Php-webdriver 的安装与使用教程

    Php-webdriver 是 Facebook 开发的基于 PHP 语言实现的 Selenium WebDriver 客户端组件,可以用它来操作浏览器.常见的操作包括:自动化测试.采集数据等. 安装 ...

  4. zabbix3.2升级3.4报错Database error

    摘要: zabbix3.2版本升级到zabbix3.4版本后打开页面报错,报错内容如下 Database errorThe frontend does not match Zabbix databas ...

  5. vue + elementUI开发,使用el-tabs,导致浏览器卡死问题。

    第一次自己建项目,用过el-tabs,当时是正常使用的. 贴下版本信息: "element-ui": "^2.13.0", "js-md5" ...

  6. 【JUC系列】01、之大话并发

    学习方法 学习技术的方法都很类似,大部分都有着类似的步骤: 场景 需求 解决方案 应用 原理 并发的目的 充分利用CPU 和 I/O资源 提高效率 并发的维度 分工 同步/协作 互斥 分工 线程池 f ...

  7. win10系统无法删除文件的解决方法

    方法/步骤 1:首先进入不能删除的文件所在的文件夹 2:右键单击此文件夹,选择授予访问权限 3:在授权界面选择删除权限 4:在删除权限中点击更改共享权限 5:我们选择administrator级别,点 ...

  8. 使用 Kafka + Spark Streaming + Cassandra 构建数据实时处理引擎

    Apache Kafka 是一个可扩展,高性能,低延迟的平台,允许我们像消息系统一样读取和写入数据.我们可以很容易地在 Java 中使用 Kafka. Spark Streaming 是 Apache ...

  9. Python SimpleHTTPServer (python3 -m http.server 6789)

    搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享.但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方.比如你想快速共享Linux系统的某个目录给整个项目 ...

  10. Android学习笔记基于回调的事件处理

    流程: 常见的回调方法: 代码示例: @Override public boolean onTouchEvent(MotionEvent event) { Toast.makeText(getAppl ...