gRPC by .net core 3.x——概念、语法、编译
什么是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——概念、语法、编译的更多相关文章
- Java基础概念语法
Java基础概念语法 注释 单行注释 //行注释说明 多行注释 /* 多行注释说明 */ 文档注释 /** *@author 程序的作者 *@version 源文件的版本 *@param 方法的参数说 ...
- GRPC与.net core
系列章节 GRPC与.net core GRPC截止时间与元数据 GRPC与netcore Identity GRPC与netcore IdentityServer4 概述 GRPC的数据交互模式有: ...
- gRPC asp.net core自定义策略认证
在GitHub上有个项目,本来是作为自己研究学习.net core的Demo,没想到很多同学在看,还给了很多星,所以觉得应该升成3.0,整理一下,写成博分享给学习.net core的同学们. 项目名称 ...
- Office·Word高级·VBA基础概念语法
阅文时长 | 5.21分钟 字数统计 | 1823字符 『Office·Word高级·VBA基础概念语法』 编写人 | SCscHero 编写时间 | Monday, June 29, 2020 文章 ...
- 体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图
这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配 ...
- .NET Core单文件发布静态编译AOT CoreRT
.NET Core单文件发布静态编译AOT CoreRT,将.NET Core应用打包成一个可执行文件并包含运行时. 支持Windows, MacOS and Linux x64 w/ RyuJIT ...
- .net core 3.0视图动态编译
之前在使用Visual Studio 2019的时候,就发现asp.net 3.0中没有cshtml动态编译的功能了:也就是说,如果改了cshtml,刷新页面不会立即生效,而是要重新编译一次才行. 这 ...
- ASP.NET Core 中的 Razor 文件编译
asp .net core mvc 3.0 在编译的时候做了一些改变,有些view视图更改需要重新编译,你也可以配置运行时编译,不用每次更改都去重新生成,具体代码如下,从官方文档看到,做个记录. Ra ...
- [转帖].NET Core单文件发布静态编译AOT CoreRT
.NET Core单文件发布静态编译AOT CoreRT https://www.cnblogs.com/linezero/p/CoreRT.htm .NET Core单文件发布静态编译AOT Cor ...
随机推荐
- Java实现 蓝桥杯VIP 算法提高 盾神与砝码称重
算法提高 盾神与砝码称重 时间限制:1.0s 内存限制:256.0MB 提交此题 查看参考代码 问题描述 有一天,他在宿舍里无意中发现了一个天平!这个天平很奇怪,有n个完好的砝码,但是没有游码.盾神为 ...
- Java实现冗余路径Redundant Paths
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- Java实现 蓝桥杯 历届试题 翻硬币
问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如 ...
- java实现第六届蓝桥杯牌型整数
牌型整数 题目描述 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不 ...
- 【大厂面试04期】讲讲一条MySQL更新语句是怎么执行的?
流程图 这是在网上找到的一张流程图,写的比较好,大家可以先看图,然后看详细阅读下面的各个步骤. 执行流程: 1.连接验证及解析 客户端与MySQL Server建立连接,发送语句给MySQL Serv ...
- 被迫重构代码,这次我干掉了 if-else
本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近公司貌似融到资了!开始发了疯似的找渠道推广,现在终于明白为啥前一段大肆的招人了,原来是在下一盘大棋,对员工总的来 ...
- Debian安装NVIDIA显卡驱动
1. sudo apt-get install nvidia-detect nvidia-detect 输出信息: Detected NVIDIA GPUs: 01:00.0 VGA compatib ...
- 09.Django-信号
目录 Django中的信号及其用法 Django中内置的signal 内置信号的使用 自定义信号 Django中的信号及其用法 Django中提供了"信号调度",用于在框架执行操作 ...
- python中的常用BIF
BIF:就是python的内置函数,为了方便程序员的! 1.input()输入 在这里,只讲python3,因为python2到python3有不小的变化 通俗的解释就是你在控制台不管输入什么东西,都 ...
- CISCN 2019-ikun
0x01 进去网址,页面如下: 刚开始有个登陆和注册的按钮,上图是我已经注册后登陆成功后的页面,我们发现在图的左下角给了一个关键的提示,购买LV6,通过寻找我们发现页面数很多,大概500页,一个一个找 ...