.net高级面试进阶篇(一):GRPC


前言:.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的服务端就好了  可以直接运行如下

  

 

  接下来在其他客户端系统就可以像调用普通方法一样调用这个服务

  

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM