前言:.net高级面试进阶篇适用于面试前临时补充进阶知识量的小伙伴,特别是你没那么多时间去一个个详细的系统学习,只想用最快的时间去了解一门技术以应付面试官情况。
一. GRPC 是什么 ?
客户端一般通过接口的形式调用服务端的资源或业务逻辑,我们最常用的是Restful Api,webapi就是Rest的一种,客户端通过http协议用uri地址访问服务接口,他们之间用json或者xml的形式传输数据。
而除了Rest以外,还有RPC远程过程调用的方式可以实现接口调用,相较于Rest,Rpc性能远超,更严格,更安全,而grpc是微软开发的一种rpc,其他还有Thrift、Dubbo等,你可以理解成前端框架有vue react angular,而你只需要选一种大家最通用的vue就够用了,grpc就是一样的道理,毕竟是微软爸爸在netcore中指定用的。
总结:Grpc(远程过程调用),相对于Restapi的另一种接口服务框架。
二. GRPC的优缺点 ?
优点:高性能,轻量级
一方面RPC是基于Tcp协议架设在传输层,而Rest是基于Http协议架设在应用层。
另一方面RPC采用二进制传输协议ProtocolBuffer压缩传输数据。
需要注意的是GRPC有个特殊点,他是RPC中的一个特例,它采用的是Http/2的协议,虽然性能方面没有传统RPC的顶格配置,但这种差距几乎可以忽略。
而Http/2的特点使它具备了更高的通用性和可塑性。
缺点:可读性差,Http/2支持不好
虽然Rest的性能不好,但Json的可读性很好,人眼直接能读懂,而GRPC的Protobuf二进制可读性差
另外目前大多数Http方式的服务都无法支持RRPC的Http/2协议,所以目前GRPC基本受限于内部系统之间或点对点的通讯服务,尤其适合各种微服务架构。
如果你的公司各种内部系统交互庞杂,业务逻辑繁多,那么高性能的GRPC将是你的首选。
三. 如何在 .NetCore 3.0中搭建RPC
网上有很多教程,这里就不一一讲解,我就贴出一些关键步骤的直观图片,让你有一个直观的印象知道GRPC到底是怎么搭建的。
微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0
前提:VS2019 .Net Core3.1SDK
1. 新建一个空的asp.net core Web应用程序
2. 引入Grpc的Nuget包
3. 关键步骤,新建proto文件编写IDL接口代码
Protocol Buffer 协议缓冲区,是一种接口标准语言,详见官方文档 https://docs.microsoft.com/zh-cn/aspnet/core/grpc/protobuf?view=aspnetcore-3.0
//协议版本3.0 syntax = "proto3"; //设置命名空间 默认是项目名.文件夹名 为了后面方便引用 这里我去掉了后面的.文件夹名 option csharp_namespace = "RpcDemo"; //以下部分就是需要自己写的proto代码 //关键代码 定义服务类Students service Students { //rpc关键字就是定义接口方法名 后面是参数对象类StudentInput 以及返回对象 都是自定义的类 见下文 rpc GetStudent (StudentInput) returns (StudentOutput); } //自定义类StudentInput 关键字message就是定义类对象 也就是C#中的class message StudentInput{ //类的字段 int32就是C#中的int 这里注意后面的1并非是值 而是参数的序号 你只要按照顺序1 2 3 4...这样定义饥渴 int32 searchId=1; string searchName=2; } //自定义类StudentOutput message StudentOutput{ int32 studentId=1; string studentName=2; }
接着你的服务的具体实现类
到这里GRPC的服务端就好了 可以直接运行如下
接下来在其他客户端系统就可以像调用普通方法一样调用这个服务